Compare commits

...

194 Commits

Author SHA1 Message Date
Arik Chakma
ae08294a9e fix: topic id 2024-07-08 21:14:36 +06:00
Arik Chakma
96e5281c50 fix: remove check 2024-07-08 21:12:02 +06:00
Arik Chakma
83388f07b6 fix: checkbox right click 2024-07-08 20:47:57 +06:00
Arik Chakma
cae841b898 fix: checkbox right click 2024-07-08 20:38:04 +06:00
dsh
3c065338db fixed file name issue and added content to 2-3 trees (#6100) 2024-07-08 14:11:36 +01:00
dsh
cd057508cb correct file name for solr (#6099) 2024-07-08 13:58:51 +01:00
Kamran Ahmed
366bd61562 Fix content file not found 2024-07-08 12:26:52 +01:00
Arik Chakma
9154a57eb9 feat: implement todo and resource button (#6055)
* feat: implement todo and resource button

* feat: add hover color
2024-07-08 12:03:58 +01:00
Martins Gouveia
24f9e0c6ce Update healthkit@Jsu5f6QASpuvpky_W5q-O.md (#6097) 2024-07-08 11:53:13 +01:00
Abdallah Gaber
8b82746676 Adding console.* and more recources to 106-nodejs-command-line-apps (#6098)
* Adding console.* and more recources to 106-nodejs-command-line-apps

* Update src/data/roadmaps/nodejs/content/106-nodejs-command-line-apps/101-printing-output/index.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-08 11:24:59 +01:00
dsh
d09962b6a3 Update topic titles (#6096) 2024-07-08 10:58:35 +01:00
Maria
df3dfe9971 updating swiftlint content (#6073)
* updating swiftlint content

* making code review changes

adding standard line and removing installation instructions

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>

* Update src/data/roadmaps/ios/content/swiftlint@NnTC3R8goZQTXHmfHKHbM.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-08 10:14:16 +01:00
Abdallah Gaber
ec175482bd Updates on 106-nodejs-command-line-apps (#6087)
* updates on 106-nodejs-command-line-apps

* Apply suggestions from code review

Slight style and guideline editting

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-08 10:12:10 +01:00
Damar
5aa67c2e2b Fix typo in final paragraph (#6093) 2024-07-08 10:05:01 +01:00
garvit3835
22290ae0b7 Update terraform-validate@wdYLjB-tKg76B7YcnhevQ.md (#6095)
* Update terraform-validate@wdYLjB-tKg76B7YcnhevQ.md

* Update src/data/roadmaps/terraform/content/terraform-validate@wdYLjB-tKg76B7YcnhevQ.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-08 09:59:45 +01:00
Konrad
a8f68371f0 feat(roadmap/angular): add more resources about angular routing (#6089) 2024-07-08 00:15:01 +01:00
Chad Davis
0da2cab0ab Fix capitalization (#6082)
* Replace VCS Hosting with Repo Hosting Services

* Fix capitalization on Repo Hosting Services and GitHub

* Replace VCS Hosting with Repo Hosting Services and fix capitalization on Bitbucket

* Fix capitalization on Bitbucket

* Fix capitalization on Bitbucket

* Fix capitalization on Bitbucket

* Fixed spelling mistake

Changed "None English content." to "Non-English content."
2024-07-07 18:18:52 +01:00
Konrad
bab0ec0a5d fix(roadmap/angular): remove outdated article about angular forms (#6088)
removed link to article was about angularjs version
2024-07-07 14:35:35 +01:00
Karim Safan
36b42dfaa2 Update 102-loops.md (#6071)
bug in the code
2024-07-07 14:02:50 +01:00
dsh
6cd18458db add iOS copy and links (#6059) 2024-07-05 15:57:09 +01:00
Kamran Ahmed
93eb568bbd Migrate android roadmap to new format 2024-07-05 15:47:03 +01:00
Kamran Ahmed
3997641d0b Add android content 2024-07-05 15:47:03 +01:00
Martins Gouveia
3fda008f12 Update arkit@k3uHcF0CsyHr6PK95UwR1.md (#6061)
Add content and resources to Arkit section

- Updated content about ARKit framework
- Included additional links to oficial documentation
2024-07-05 13:39:08 +01:00
Nikhil
7f1f58516e DSA | Updated 105, Sorting Algorithm links (#6063)
* DSA | Updated 105, Sorting Algorithm links

* Update src/data/roadmaps/datastructures-and-algorithms/content/105-sorting-algorithms/101-merge-sort.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 13:31:23 +01:00
Ruslan Semagin
afb0da4bd6 link to article 'How to write documentation' in 'Rust' (#6058) 2024-07-05 09:49:40 +01:00
mrgsdev
485b3d5c9a Update hig@1I5eFKqFVBxWLAXfpgNXO.md (#6032)
* Update hig@1I5eFKqFVBxWLAXfpgNXO.md

This commit includes to the Human Interface Guidelines (HIG) documentation.

* Update src/data/roadmaps/ios/content/hig@1I5eFKqFVBxWLAXfpgNXO.md

style fix

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:31:35 +01:00
mrgsdev
78e20d1e85 Update iboutlets@tuUuLInq0p-nhehe2AqPg.md (#6035)
* Update iboutlets@tuUuLInq0p-nhehe2AqPg.md

* Update src/data/roadmaps/ios/content/iboutlets@tuUuLInq0p-nhehe2AqPg.md

fix style

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:29:45 +01:00
mrgsdev
e7cd703607 Update storyboards@a2CqrCJSxGfHq6_Y9f_re.md (#6036)
* Update storyboards@a2CqrCJSxGfHq6_Y9f_re.md

* Update src/data/roadmaps/ios/content/storyboards@a2CqrCJSxGfHq6_Y9f_re.md

fix styling

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:29:03 +01:00
mrgsdev
01c78a8cf4 Update auto-layout@j2BL0sf3WjnJZZWa7cCjy.md (#6037)
* Update auto-layout@j2BL0sf3WjnJZZWa7cCjy.md

* Update src/data/roadmaps/ios/content/auto-layout@j2BL0sf3WjnJZZWa7cCjy.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:28:04 +01:00
mrgsdev
cc123f74ea Update lottie@i-T6GTqS0FZ_Llt5v4SvR.md (#6038) 2024-07-05 08:26:09 +01:00
mrgsdev
fed5f722b9 Update mvc@a-QDI7Ei-B5BRHbicFcfG.md (#6039) 2024-07-05 08:25:16 +01:00
mrgsdev
cb4b5a4cc9 Update navigation-view@IBr2P7dknWTnZ2a-fFCqN.md (#6040) 2024-07-05 08:24:24 +01:00
mrgsdev
38be5892d3 Update navigation-stacks@TLm70PlTI0K3Odn1iYxWX.md (#6041)
Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:23:11 +01:00
mrgsdev
24b47d3dd7 Update uikit@-7OW2IgiMk1eot1PaYd7m.md (#6042)
* Update uikit@-7OW2IgiMk1eot1PaYd7m.md

* Update src/data/roadmaps/ios/content/uikit@-7OW2IgiMk1eot1PaYd7m.md

adding content from my draft PR

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:22:09 +01:00
mrgsdev
783e2400b7 Update navigation@FXUrfyvuIIOH7VDnT_E0z.md (#6043) 2024-07-05 08:20:23 +01:00
mrgsdev
c9390d8612 Update core-data@H4-Dp2WTA6HAZiFRQdLjx.md (#6044)
* Update core-data@H4-Dp2WTA6HAZiFRQdLjx.md

* Update src/data/roadmaps/ios/content/core-data@H4-Dp2WTA6HAZiFRQdLjx.md

swapped to a video as the course wasn't free/was behind a login.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:19:18 +01:00
mrgsdev
0cad5890ea Update swift-package-manager@KFkX8_Hv9SCFeCtZMZIQM.md (#6045)
* Update swift-package-manager@KFkX8_Hv9SCFeCtZMZIQM.md

* Update src/data/roadmaps/ios/content/swift-package-manager@KFkX8_Hv9SCFeCtZMZIQM.md

add spacing

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:17:15 +01:00
mrgsdev
f2297389a7 Update cocoapods@epr1sOEZIAOwlgb8bre7r.md (#6046) 2024-07-05 08:16:32 +01:00
mrgsdev
68906c6cf6 Update core-ml@7s9Elv80TbZX_-NZpyutj.md (#6048) 2024-07-05 08:15:39 +01:00
mrgsdev
d5ea2ed17a Update dynamic-type@0nei6iwP4Pgi_j4vVi_Qt.md (#6049)
* Update dynamic-type@0nei6iwP4Pgi_j4vVi_Qt.md

* Update src/data/roadmaps/ios/content/dynamic-type@0nei6iwP4Pgi_j4vVi_Qt.md

Removing templating

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-05 08:15:15 +01:00
mrgsdev
6118162b03 Update accessibility@1DZYPqvgY6GtwMCS7N2y-.md (#6050) 2024-07-05 08:13:59 +01:00
Florian Schweizer
0a675760ed Add Combine & NavigationStack content to the iOS roadmap (#6052)
Add content to Navigated stacks and combine
2024-07-05 08:13:25 +01:00
mrgsdev
4b5635c5e5 Update voice-over@trAMZVA4tDB7b_qAgiWNW.md (#6051) 2024-07-05 08:12:37 +01:00
mrgsdev
ee298f9959 Update keeping-updated-with-wwdc@fOOQurIL1w3PwH5Mep9x1.md (#6053) 2024-07-05 08:11:29 +01:00
mrgsdev
d09710fee6 Update new-project@BJgoAgH85U6S3RtXq7hHV.md (#6054) 2024-07-05 08:11:00 +01:00
Guilherme Carvalho de Azevedo
7d3d022d5a fix(devops-roadmap): typo fixed (Pometheus to Prometheus) (#6056) 2024-07-05 08:09:43 +01:00
mrgsdev
e81571f7fc Update history-and-why-swift@z4-1Gc95JKYAn2RPFc7hw.md (#6034) 2024-07-05 08:08:00 +01:00
Farzad Mohtasham
ed01ffbefa Tanstack/Router Added to React-Router topic (#6030)
* Added Tanstack-Router to the React Routers section
2024-07-05 08:06:38 +01:00
Farzad Mohtasham
1e5b467124 Added Zustand video tutorial for State-management topic (#6028)
Add Zustand links & Higher Order videos.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-04 16:13:17 +01:00
Konrad
03b6337388 refactor(roadmap/angular): update links to new angular.dev documentation (#6024)
additionally:
- remove duplicated links in some documentations
- improve titles
2024-07-04 15:46:38 +01:00
dsh
9aed682629 add version management subtopic (#6025)
* add version management subtopic

* Update src/data/roadmaps/terraform/content/version-management@6zFuSNOfbPaYIE_t--2nr.md

correct typo

* Update src/data/roadmaps/terraform/content/version-management@6zFuSNOfbPaYIE_t--2nr.md

Co-authored-by: Konrad <kord.stp@gmail.com>

---------

Co-authored-by: Konrad <kord.stp@gmail.com>
2024-07-04 15:45:31 +01:00
dsh
1c515f1d8f altered title and subtitle to reflect devloper advocate (#6026) 2024-07-04 14:48:27 +01:00
dsh
1ebf850882 Adding links and copy to Terraform roadmap (#5914)
* Adding links and copy to Terraform roadmap

* added hcl content

* add resource topic content

* add tf meta-argument content and copy

* add content for variables and outputs

* added more links to areas that are lacking

* Apply suggestions from code review

Corrected styling
2024-07-04 14:18:57 +01:00
Ankita soni
b7b8a935c1 Update 101-iaas-paas-saas.md (#6023)
Add popular youtube video

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-04 09:31:52 +01:00
Abdallah Gaber
3cf0a7ca8a Roadmap: MORE Node.js Content and Resources Updates and Fixes for Nearly Half the Roadmap (#6022)
Corrected type tags and links, formatted content text, added new links.
2024-07-04 09:28:53 +01:00
Kamran Ahmed
fac090c803 Fix height of the tips box 2024-07-04 01:35:13 +01:00
Kamran Ahmed
adc44ed325 Migrate data analyst roadmap 2024-07-04 01:21:18 +01:00
Kamran Ahmed
2c79d85c67 Add progress caching cleanup 2024-07-03 12:44:36 +01:00
Kamran Ahmed
e24f5dfe6a Add devops roadmap 2024-07-03 12:44:36 +01:00
Kamran Ahmed
ad712b2c4a Redraw devops roadmap with editor 2024-07-03 12:44:35 +01:00
ChuYang
f3fda96c15 chore(docs): fix typos and grammar errors for react.md (#6018) 2024-07-03 10:51:23 +01:00
Farzad Mohtasham
db1ba63e6c feat: Added 3 videos to React-Roadmap, For HOC (#6013) 2024-07-03 09:42:46 +01:00
Abdallah Gaber
f63c59d9ee Roadmap: Node.js Content and Resources Updates and Fixes (#6015)
Corrected type tags, added some extra copy, added new links.
---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-03 09:41:10 +01:00
Arik Chakma
72cc28a436 fix: label line break (#6014) 2024-07-02 22:23:07 +01:00
dsh
58e2405fa0 correct FS link to FS roadmap rather than react (#6010) 2024-07-02 13:59:03 +01:00
Amirali Toori
e5ee35acee Addition: [roadmaps/DataAnalyst] Add article for Finding Outliers (#5999) 2024-07-02 13:28:37 +01:00
Subroto Banerjee
a347c1739b Articles on API security, server security and cyber security (#6001)
Add content links.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-02 13:27:36 +01:00
Timofey Veretnov
10ac77308d Concurrency in Swift by Apple (#6004)
Updated styling and copy.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-02 13:20:05 +01:00
Nikhil
de6aaa262b DSA Roadmap | Updated Links for 102 & 105 (#6007)
Update 103-quick-sort.md
2024-07-02 13:15:24 +01:00
xaanxex
1fe5512310 Update 108-exception-handling.md (#6008)
added 2 article links
2024-07-02 13:14:02 +01:00
BANO
96b8e109b1 Add viem library to blockchain roadmap (#5975) (#6009)
* Add viem library to blockchain roadmap (#5975)

* Update src/data/roadmaps/blockchain/content/109-dapps/108-client-libraries/index.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-02 13:12:10 +01:00
Kamran Ahmed
64e71574d2 Update shout-out text on devrel roadmap 2024-07-02 11:15:44 +01:00
Kamran Ahmed
5913564d94 Remove console.log 2024-07-02 00:16:48 +01:00
Kamran Ahmed
6686e9361c debug code 2024-07-02 00:07:32 +01:00
Kamran Ahmed
e738936b5e Arrow alignment fixes 2024-07-01 23:53:54 +01:00
Kamran Ahmed
b97e2c7ce1 Fix alignment of devrel engineer 2024-07-01 23:08:49 +01:00
Kamran Ahmed
3e312b6aa7 Fix alignment of devrel engineer 2024-07-01 23:04:38 +01:00
Kamran Ahmed
e8a430db47 Update FAQ for devrel engineer 2024-07-01 23:03:46 +01:00
Kamran Ahmed
47e6f8e926 Add link to devrel engineer roadmap in readme 2024-07-01 22:56:02 +01:00
Kamran Ahmed
fa6f4aa6e3 Add DevRel roadmap assets 2024-07-01 22:52:09 +01:00
Kamran Ahmed
cf0d10eeed Add DevRel roadmap 2024-07-01 22:32:59 +01:00
Amirali Toori
38d96682cf Addition: [roadmaps/DataAnalyst] Add article for Correlation Analysis (#5997) 2024-07-01 16:26:40 +01:00
Mrutyunjay Lodhi
61788edcd0 feat: Added Article for flutter internals (#5995) 2024-07-01 11:54:38 +01:00
mrgsdev
c48907c5e0 Update memory-management (#5992)
* Update memory-management@tqbg8mBJfjuXacdMlIB_L.md

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-01 11:40:34 +01:00
Leni Kirilov
90371b081a Java roadmap - multiple fixes (#5957)
Adding copy, content links & remove broken links.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-01 10:39:44 +01:00
Leni Kirilov
c80591c1cf Java roadmap: jvm clarifications (#5945)
removed duplicate link
added JVM languages and GraalVM as a popular alternative

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-01 10:34:38 +01:00
mrgsdev
4734a8eb02 Update xcode@la5M4VoH79bhnN8qj5Izp.md (#5967)
Added two official videos from the Apple YouTube channel:
- WWDC24: What’s new in Xcode 16
- WWDC24: Xcode essentials
---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-07-01 10:31:25 +01:00
Amirali Toori
b6ceebae9c Add Article for 101-kurtosis.md in Data Science Road map (#5981)
Add a link (article) that describes the topic of Kurtosis.
2024-07-01 10:24:07 +01:00
Amirali Toori
54459a52f2 Add an article to Data Science roadmap about Skewness concept (#5982)
This is a simple and useful article, which I think might be very useful for understanding the concept of skewness.
2024-07-01 10:22:44 +01:00
Amirali Toori
446373532f Addition: [roadmaps/DataScience] Add article for Dispersion (#5983) 2024-07-01 10:22:00 +01:00
Micael Andrade
a69459ba31 fixing broken link (#5985) 2024-07-01 09:54:57 +01:00
Konrad
7f35c2f6f0 docs(contributing): remove a duplicated opensource type (#5971) 2024-06-30 01:49:53 +06:00
dsh
7e2f9d3e6b add linux permissions article and video (#5964) 2024-06-28 16:04:08 +01:00
fellalli
e4d106904e Corrected / Improved C++ roadmap (#5947)
Updated c++ content with `std::` as this is the recommended method. Added content links where needed and corrected various wording and grammar.
2024-06-28 14:26:20 +01:00
MTRX
7d694f3e56 Fix and add links in Computer Science roadmap (#5960)
Corrected daily.dev feed link & added content links.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-28 14:23:44 +01:00
Jhonatan Mustiola
338bce1308 Update 108-hashmap.md (#5958)
Add Rust Hashmap content links.

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-28 14:20:57 +01:00
Nikhil
c9d6b36b34 Fixed Typo for DSA Roadmap (#5962)
Added content links and fixed link syntax error.
---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-28 14:17:17 +01:00
Ruslan Semagin
2874eb0a42 add links for 'Rust Macros' (#5963) 2024-06-28 14:12:59 +01:00
Kamran Ahmed
a62ed919c1 Add github URL in redirect 2024-06-28 12:36:29 +01:00
Kamran Ahmed
9ecf4a9d78 Add x URL 2024-06-28 12:33:24 +01:00
Kamran Ahmed
2c373c7574 Add links for discord, twitter and youtubeg 2024-06-28 12:18:33 +01:00
Kamran Ahmed
d9cdc95a79 Update product mangaement SEO description 2024-06-27 22:23:19 +01:00
Kamran Ahmed
3af4bde2ea Fix text wrap on TF roadmap 2024-06-27 22:23:19 +01:00
Arik Chakma
1ee6f0e125 feat: add daily dev link in profile (#5948) 2024-06-27 11:52:03 +01:00
Jhonatan Mustiola
9471bf50f9 Update 107-string.md (#5951)
More links were added to the Vector step in the Rust roadmap
---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-27 10:04:51 +01:00
Nikhil
f143d800bd DRAFT: Added link(s) for DSA Roadmap (#5935)
* Added various content links

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-27 09:55:38 +01:00
Jacob Penner
f7b42a63bf feat: Add content links to API Design roadmap (#5869)
* Add content links to 'What are APIs' section

* Add content links to 'API Documentation Tools' section

* Add content links to 'HTTP' section

* Add content links to 'HTTP Versions' section

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-06-27 09:46:44 +01:00
Leni Kirilov
212be69582 Update 106-files-and-apis.md (#5943)
added newer Files.* API with articles
2024-06-27 09:42:54 +01:00
MTRX
393eb6c87d Add and correct links in C++ resources section (#5950) 2024-06-27 09:40:02 +01:00
Michael Budnikov
fe6e0830eb All additional links at the end of the articles in C++ roadmap have been wrapped with 'Learn more from the following resources:' line as in contribution docs stated (#5949) 2024-06-27 09:36:19 +01:00
Ye Naing Tun
24c4221591 Add Content links to 'Vue' Section (#5934)
* added Vue content links.
2024-06-27 09:34:11 +01:00
Leni Kirilov
7744363cde added enum and records (#5940) 2024-06-26 14:06:55 +01:00
Leni Kirilov
ce6e2ff71e added lambda functions examples and articles (#5941) 2024-06-26 14:03:38 +01:00
Ruslan Semagin
09e345f48b add useful links for 'Rust Error Handling' (#5936) 2024-06-26 09:58:31 +01:00
Nguyen Trong Toan
5dff9b20e1 feat: Update iOS roadmap link to React Native (#5933)
The iOS roadmap link for React Native was updated to the correct URL. This change ensures that users are directed to the appropriate resource for learning React Native on the iOS roadmap.

Authored-by: kai <trongtoan1609ht@gmail.com>
2024-06-25 21:23:38 +01:00
Michael Budnikov
f1d6cd51cd Update index.md: Article about function pointers was added (#5916)
I added the link to the article about function pointers in C++ that helped me to learn more about it and try it on my own.
2024-06-25 16:04:06 +01:00
GGGamesXDlol
045bab002a Updated 100-spline.md: Added a video about splines (#5930)
* Added a video about splines

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-25 13:58:55 +01:00
dsh
08b1b48b5e Dansholds/update contrib doc (#5931)
* update to contribution.md
2024-06-25 13:04:01 +01:00
dsh
0b6da0e076 Correct iOS tool/component names (#5922)
* Correct iOS tool/component names

* forgot AVFoundation
2024-06-25 10:20:51 +01:00
Jhonatan Mustiola
520fa2db45 Update 106-vector.md (#5920)
More links were added to the Vector step in the Rust roadmap
2024-06-25 09:30:55 +01:00
Dale Nash
3c160e8809 Add missing space to about page (#5921)
Very minimal but sure, it's valid.
2024-06-25 09:28:55 +01:00
Kamran Ahmed
f682a6e1a2 Fix content in wrong files 2024-06-24 22:52:20 +01:00
Kamran Ahmed
3f655ad424 Add legends to backend roadmap 2024-06-24 20:03:32 +01:00
Kamran Ahmed
5b108f1fd2 chore: redraw backend roadmaps with our editor (#5917)
* Migrate backend roadmap

* Update frontend roadmap

* Fix typo in backend roadmap

* Remove local caching of progress

* Update migration count
2024-06-24 18:32:31 +01:00
dsh
0064d04ff4 Add external links to intro PM topics (#5867)
* add external links to intro PM topics

* lifecycle and development links
2024-06-24 15:51:55 +01:00
Abdallah Gaber
e98ebcfa11 Fix and Update JavaScript Recourses Links (#5896)
* Update JavaScript-asynchronous Promises resources

* Replace broken link

The previous link to the article was outdated and resulted in a 404 error.

* Fixed the JavaScript typo

* Add Video Resource JS 101-debugging-memory-leaks.md

Added a helpful YouTube video on visualizing memory leaks and debugging them in the console.

* Introduce resource (Chrome Developers) JS-debugging-performance

Added link to Chrome Developers documentation on debugging JavaScript performance in JS 102-debugging-performance.md. This provides valuable insights and best practices for optimizing code performance from the official docs.
2024-06-24 10:01:02 +01:00
Blamowizard
64bbbc2f25 Typo/grammar fixes plus copy edits for Rust roadmap (19 files) (#5906)
* Fix typos Rust/100-integers.md

* Grammatical clarity Rust/101-why-rust.md

* Sentence restructuring for Rust/102-memory-safety.md

* Additional linker explanation for newbies, Rust/103-installing-rust.md

* Wording changes, Rust/103-installing-rust.md

* "tools for debugging" -> "debugging tools" Rust/104-ides-and-rust.md

* Small clarity change Rust/105-rust-repl.md

* "systems" -> "system" (for consistency), Rust/101-why-rust.md

* Clarity, Rust/101-variables.md

* Small sentence edits, Rust/102-control-flow.md

* Another small edit, 102-control-flow.md

* Small changes + added `return` keyword info, Rust/103-functions.md

* Rust/103-functions.md

* Clarity/grammar for Rust/104-pattern-matching.md

* Sentence flow + prose about pattern matching, Rust/100-syntax/index.md

* Wording/paragraph improvements, Rust/100-syntax/index.md

* List-ified, italics-ified for Rust/101-ownership/100-rules.md

* Small changes + bullets for Rust/102-stack-heap.md

* List-ify + small clarity improvements, Rust/101-ownership/index.md

* Sentence flow & clarity for Rust/102-constructs/100-enums.md

* Rewrite of Rust/100-enums.md

* a -> an

* List-ify and small edits for Rust/101-structs.md

* Bold some stuff in Rust/101-structs.md

* Small rewrite for Rust/102-traits.md

* Rewrite Rust/103-impl-blocks.md

* List-ify + clarity edits for Rust/102-constructs/index.md

* More data types explanation for Rust/102-constructs/index.md

* define -> declare

* Update index.md

* Unbolded “traits”

* Unbolded “enum” + replaced em-dashes with commas

* “Rust is a system…”

* Replaced em-dashes with commas

* Update 102-control-flow.md

Replaced more em-dashes with commas

* Unbold “struct”

* Unbold “constructs”
2024-06-24 09:59:19 +01:00
Kamran Ahmed
2da1f61945 Update progress nudge number 2024-06-23 15:40:51 +01:00
Kamran Ahmed
894b66f026 Update progress 2024-06-23 15:22:15 +01:00
Kamran Ahmed
f5fc71aadb Redraw frontend roadmap with our editor (#5897)
* Update frontend roadmap

* Migrate content for frontend roadmap

* Add a button for beginner friendly version

* Frontend roadmap

* Implement beginner version of frontend roadmap

* Clear progress for roadmaps

* Update
2024-06-23 14:55:09 +01:00
Amit Merchant
ec9bebbcda Add article "Unlimited function parameters using Rest" (#5908) 2024-06-23 12:22:26 +01:00
Kamran Ahmed
9cf940e741 Remove badge from backend questions 2024-06-22 03:29:33 +01:00
Kamran Ahmed
f4b157b328 Update new badges 2024-06-22 03:20:05 +01:00
Kamran Ahmed
4c54e20a11 Add terraform assets 2024-06-21 21:26:15 +01:00
Kamran Ahmed
c4cc0630c0 Add basic content for hcl 2024-06-21 21:26:15 +01:00
Kamran Ahmed
a637805a24 Add directory structure for terraform roadmap 2024-06-21 21:26:15 +01:00
Kamran Ahmed
8604810a2e Add directory structure 2024-06-21 21:26:15 +01:00
Kamran Ahmed
a2481f7681 Add terraform roadmap 2024-06-21 21:26:15 +01:00
Nikita Ivanov
88926c9ba5 Fix answer for backend question about eventual consistency (#5904) 2024-06-21 18:47:10 +01:00
Ed Lan
faf12dcf8e Update faqs.astro (#5898)
Copy update
2024-06-20 15:06:09 +01:00
Kamran Ahmed
70d3e6cd39 Redraw frontend roadmap fork 2024-06-20 12:51:27 +01:00
Jhonatan Mustiola
b1d790739f More links to steps in the Rust Roadmap (#5894)
More links were added to the array step in the Rust roadmap
2024-06-20 09:46:26 +01:00
Ante Barić
6d983167c8 feat: daily.dev links (#5860)
* feat: add daily.dev link type

* feat: replace to feed label

* feat: add links to different pages
2024-06-19 15:58:20 +01:00
Kamran Ahmed
c935e2457e Add tracking of topic resource clicks 2024-06-19 12:24:34 +01:00
Ed Lan
d21e01805e Update backend.md (#5890)
Small copy tweak
2024-06-19 09:39:54 +01:00
Kamran Ahmed
b31b4e2a11 Update ios roadmap 2024-06-18 12:17:19 +01:00
Nikita Ivanov
94b245b2cf Fix link to containerization question's answer (#5885)
Corrected content for Containerization question from stateless-http to containerization.
2024-06-17 16:13:53 +01:00
dsh
f37cc57177 Add new authors; Fix devops guide routing issue (#5883)
* add william and kenny as authors

* fixed routing issue from /authors on new devops guides
2024-06-17 15:50:04 +01:00
Ed Lan
533e93e647 Update faqs.astro (#5882)
Tweak to add link to new DevOps guide.
2024-06-17 14:51:45 +01:00
Abdallah Gaber
6f6b942ba4 Update JavaScript-asynchronous resources (#5871)
Added links to two videos for better understanding. One video features comprehensive and visually appealing content, while the other from JSConf provides visuals suited for beginners.
2024-06-17 09:50:03 +01:00
Ebrahim Gamal
5cbbaa61a9 Update 100-jetpack-compose.md (#5873)
I added video resource for jetpack compose.
---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-06-17 09:48:27 +01:00
VIKASH LAL
e0fa460ab9 Add resource for DOM (#5232)
* Update 102-shadow-dom.md

These changes are important from a student's perspective.

* Update src/data/roadmaps/frontend/content/113-web-components/102-shadow-dom.md

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-06-17 09:40:14 +01:00
dsh
41a3f85ac2 Add iOS media layer topic content (#5846)
* add iOS media layer topic content

* Add copy around Xcode and Media Layer
2024-06-17 09:38:03 +01:00
dsh
8e2515a84b Add devops vs sre guide (#5854) 2024-06-17 09:37:36 +01:00
Snoppy
0e8613daae chore: fix typos (#5881)
Signed-off-by: snoppy <michaleli@foxmail.com>
2024-06-17 07:24:11 +01:00
Kazuki Kurahashi
3dc08388d9 Fix typo 101-hashing-encryption-encoding.md (#5878) 2024-06-16 08:39:44 +01:00
Wesley Blake
714b604546 Update 103-data-transformation.md (#5855)
Additionally, links to examples in Python and R
2024-06-14 22:01:35 +01:00
Jhonatan Mustiola
89d22aa127 Update 101-floats.md (#5859)
Added more links. Content keeps the copy
2024-06-14 14:22:51 +01:00
Ruslan Semagin
cb8f380dc0 link to 'Docker Multi-stage builds' (#5863) 2024-06-13 15:18:13 +01:00
Kamran Ahmed
b4f84b448d Add product manager roadmap to get-started and roadmaps pages 2024-06-12 23:39:07 +01:00
dsh
235c571347 Fix typos in product management roadmap (#5862)
* correct pm goal types

* corrected typos

* swapped project and product

* swap project and product on title

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-06-12 18:49:58 +01:00
fellalli
3025e17e4c Add Product Manager Roadmap to readme.md (#5861) 2024-06-12 18:48:15 +01:00
Kamran Ahmed
86947d83d7 Product vs project management 2024-06-12 18:41:40 +01:00
Yash Deore
0ab46ae861 Update 100-instance-types.md (#5853)
* Update 100-instance-types.md

Updated with ec2 instance types

* Update 100-instance-types.md

added @official@ documentation for ec2 instance types

* Update 100-instance-types.md

* Update src/data/roadmaps/aws/content/101-ec2/100-instance-types.md

Ok sir

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>

---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
2024-06-12 16:36:52 +01:00
Kamran Ahmed
2046695479 Add product manager roadmap 2024-06-12 15:30:05 +01:00
Kamran Ahmed
3ed9bdb85e Resolve merge conflicts 2024-06-12 15:29:54 +01:00
Kamran Ahmed
a747a8108d Add product manager roadmap 2024-06-12 15:29:20 +01:00
Wesley Blake
17f5ca3cb0 Add resources for swap (#5850)
I thought these two were the most interesting articles on the subject.

Also provides examples on how to do it.
2024-06-11 12:16:54 +01:00
Grigory
4b12137077 docs(typescript/build-tools): update tsup link (#5851) 2024-06-11 10:56:56 +01:00
dsh
f08eae2632 Add how to become devops engineer guide (#5847)
* add how to become devops engineer guide

* Update src/data/guides/how-to-become-devops-engineer.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>

* Update src/data/guides/how-to-become-devops-engineer.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>

* Update src/data/guides/how-to-become-devops-engineer.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>

* Update src/data/guides/how-to-become-devops-engineer.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>

* Update src/data/guides/how-to-become-devops-engineer.md

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>

* add newline before and after all headings

* remove double empty lines

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-06-11 10:56:28 +01:00
Kamran Ahmed
6f4ab78f47 Add sponsor logic for hiding 2024-06-10 18:29:35 +01:00
Kamran Ahmed
855365d897 Topic links refactoring 2024-06-09 18:30:57 +01:00
shohan kazi
8403bf7a04 Update 107-ruby.md (#5841) 2024-06-09 09:18:31 +01:00
Swapnil Sinha
042ba11870 Add content to vercel (#5834)
Documentation addition on vercel platform.
2024-06-08 13:28:25 +01:00
Maciek Sitkowski
2fbec21378 Fix typos in frontend questions about SSR (#5837) 2024-06-08 11:08:50 +01:00
JesusG16
178826683c Update resource link for OOP section (#5833)
One of the links for the introduction to object oriented programming no longer leads to the site it used to but to an unrelated one, I found a link I think would be suitable for this.
2024-06-08 09:59:42 +01:00
Kamran Ahmed
37e5cbf315 Add link to frontend questions 2024-06-07 17:46:31 +01:00
dsh
a836a1c4b5 Add iOS content (#5829)
* add iOS content

* add GitHub article

* Update src/data/roadmaps/ios/content/functional-programming@Pj-hqRZUmwx1WhmTbLoFD.md

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2024-06-07 16:42:48 +01:00
Kamran Ahmed
86e3921ca4 Add frontend questions (#5831) 2024-06-07 16:38:06 +01:00
Sauradip Ghosh
e765771500 Update 101-alter-table.md (#5830) 2024-06-07 15:30:46 +01:00
dsh
a4000539f6 Add iOS content (#5828)
* update iOS content, correct tcp/ip title

* add swift interoperability content
2024-06-07 14:02:13 +01:00
Ruslan Semagin
66ff58f42d add useful links for Rust ORM (#5827) 2024-06-07 11:22:04 +01:00
Ruslan Semagin
6a46b9c084 remove broken import (#5824) 2024-06-07 09:53:36 +01:00
Arik Chakma
4254446552 fix: remove is-mobile lib (#5826) 2024-06-07 09:53:26 +01:00
Arik Chakma
caf2f14e54 feat: implement mobile impressions (#5818)
* add resource link for React Native Text component (#5773)

* add resource link for React Native Text component

---------

Co-authored-by: Ruslan Semagin <pixel.365.24@gmail.com>
Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
Co-authored-by: Ruslan Semagin <53819609+pixel365@users.noreply.github.com>
Co-authored-by: Suman Kisku <sumankisku1@gmail.com>

* feat: add useful links for Rust (#5781)

* feat: add links about testing in Rust (#5791)

* Patch 1 (#5792)

Update 120-real-time-data.md (#5782)

Add links to pages containing brief explanations on the topics listed here.

Update well-architected framework.

---------

Co-authored-by: devgru-3-2 <95485002+devgru-3-2@users.noreply.github.com>
Co-authored-by: Danrley Senegalha Pires <dan.osp@outlook.com>

* Fix: Standardize using "docker container ls" command when referencing listing containers (#5787)

* Add reference link to React Native ImageBackground component (#5795)

* add reference link to React Native ImageBackground component

---------

Co-authored-by: Ruslan Semagin <pixel.365.24@gmail.com>
Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
Co-authored-by: Ruslan Semagin <53819609+pixel365@users.noreply.github.com>
Co-authored-by: Suman Kisku <sumankisku1@gmail.com>

* add links to the 'Modules and Crates' node in the Rust roadmap (#5797)

* fix broken go topic (#5800)

* feat: change the description and links in the 'log/slog' node (#5798)

* change the description and links in the 'log/slog' node
---------

Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>

* add links for 'awk' (#5801)

* add links for 'grep' (#5808)

* Update ci-cd.md (#5807)

* Update Property Binding to most recent link (#5774)

Update 101-property-binding.md

* Added video resources for React Components (#5810)

Signed-off-by: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com>

* Update 104-reference-vars.md (#5775)

* fix: return response status code (#5815)

* feat: implement topic link's label (#5817)

* feat: implement mobile impressions

* fix: add to the body

---------

Signed-off-by: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com>
Co-authored-by: Juan Gerardo Eulufi Salazar <juan.eulufi.sa@gmail.com>
Co-authored-by: Ruslan Semagin <pixel.365.24@gmail.com>
Co-authored-by: dsh <daniel.s.holdsworth@gmail.com>
Co-authored-by: Ruslan Semagin <53819609+pixel365@users.noreply.github.com>
Co-authored-by: Suman Kisku <sumankisku1@gmail.com>
Co-authored-by: Yash Deore <152061059+yashdeored@users.noreply.github.com>
Co-authored-by: devgru-3-2 <95485002+devgru-3-2@users.noreply.github.com>
Co-authored-by: Danrley Senegalha Pires <dan.osp@outlook.com>
Co-authored-by: Anthony Pun <apun97@yahoo.com>
Co-authored-by: Sion Kang <siontama@gmail.com>
Co-authored-by: Liliana Santos <liliana.t.santos@hotmail.com>
Co-authored-by: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com>
2024-06-06 23:48:22 +01:00
Kamran Ahmed
6372990f76 Fix types of resources 2024-06-06 23:31:19 +01:00
Kamran Ahmed
390db65e32 Add types to links 2024-06-06 23:23:55 +01:00
Kamran Ahmed
0a579b4507 Remove geeksforgeeks links 2024-06-06 23:09:32 +01:00
Kamran Ahmed
1b79141b47 fix invalid urls 2024-06-06 23:05:23 +01:00
Kamran Ahmed
dfef66f4b5 Update topic assignment 2024-06-06 22:55:17 +01:00
Kamran Ahmed
458ae33eec Add frontend roadmap node types 2024-06-06 22:52:36 +01:00
Kamran Ahmed
4cc879104f Remove paid resources 2024-06-06 22:40:50 +01:00
Kamran Ahmed
1ac8a86f1c Remove codecademy links 2024-06-06 22:13:25 +01:00
Kamran Ahmed
79e7c10ad9 Change UI for topic labels 2024-06-06 21:32:56 +01:00
3745 changed files with 80784 additions and 92639 deletions

View File

@@ -3,6 +3,6 @@
"enabled": false
},
"_variables": {
"lastUpdateCheck": 1716803392287
"lastUpdateCheck": 1720119515249
}
}

View File

@@ -41,11 +41,26 @@ Please adhere to the following style when adding content to a topic:
Visit the following resources to learn more:
- [Description of link](Link)
- [@type@Description of link](Link)
```
`@type@` must be one of the following and describes the type of content you are adding:
- `@official@`
- `@opensource@`
- `@article@`
- `@course@`
- `@podcast@`
- `@video@`
It's important to add a valid type, this will help us categorize the content and display it properly on the roadmap.
## Guidelines
- <p><strong>Please don't use the project for self-promotion!</strong><br />
We believe this project is a valuable asset to the developer community and it includes numerous helpful resources. We kindly ask you to avoid submitting pull requests for the sole purpose of self-promotion. We appreciate contributions that genuinely add value, such as guides from maintainers of well-known frameworks, and will consider accepting these even if they're self authored. Thank you for your understanding and cooperation!
- <p><strong>Adding everything available out there is not the goal!</strong><br />
The roadmaps represent the skillset most valuable today, i.e., if you were to enter any of the listed fields today, what would you learn? There might be things that are of-course being used today but prioritize the things that are most in demand today, e.g., agreed that lots of people are using angular.js today but you wouldn't want to learn that instead of React, Angular, or Vue. Use your critical thinking to filter out non-essential stuff. Give honest arguments for why the resource should be included.</p>
@@ -80,5 +95,6 @@ Visit the following resources to learn more:
- Adding whitespace that doesn't add to the readability of the content.
- Rewriting content in a way that doesn't add any value.
- None English content.
- PR's that don't follow our style guide, have no description and a default title.
- Non-English content.
- PR's that don't follow our style guide, have no description and a default title.
- Links to your own blog articles.

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/roadmaps/devrel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

View File

@@ -42,8 +42,10 @@ Here is the list of available roadmaps with more being actively worked upon.
- [AI and Data Scientist Roadmap](https://roadmap.sh/ai-data-scientist)
- [AWS Roadmap](https://roadmap.sh/aws)
- [Linux Roadmap](https://roadmap.sh/linux)
- [Terraform Roadmap](https://roadmap.sh/terraform)
- [Data Analyst Roadmap](https://roadmap.sh/data-analyst)
- [MLOps Roadmap](https://roadmap.sh/mlops)
- [Product Manager Roadmap](https://roadmap.sh/product-manager)
- [QA Roadmap](https://roadmap.sh/qa)
- [Python Roadmap](https://roadmap.sh/python)
- [Software Architect Roadmap](https://roadmap.sh/software-architect)
@@ -78,6 +80,7 @@ Here is the list of available roadmaps with more being actively worked upon.
- [Docker Roadmap](https://roadmap.sh/docker)
- [Prompt Engineering Roadmap](https://roadmap.sh/prompt-engineering)
- [Technical Writer Roadmap](https://roadmap.sh/technical-writer)
- [DevRel Engineer Roadmap](https://roadmap.sh/devrel)
There are also interactive best practices:
@@ -93,6 +96,7 @@ There are also interactive best practices:
- [Node.js Questions](https://roadmap.sh/questions/nodejs)
- [React Questions](https://roadmap.sh/questions/react)
- [Backend Questions](https://roadmap.sh/questions/backend)
- [Frontend Questions](https://roadmap.sh/questions/frontend)
![](https://i.imgur.com/waxVImv.png)

View File

@@ -0,0 +1,189 @@
const fs = require('node:fs');
const path = require('node:path');
const allRoadmapDirs = fs.readdirSync(
path.join(__dirname, '../src/data/roadmaps'),
);
allRoadmapDirs.forEach((roadmapId) => {
const roadmapDir = path.join(
__dirname,
`../src/data/roadmaps/${roadmapId}/content`,
);
function getHostNameWithoutTld(hostname) {
const parts = hostname.split('.');
return parts.slice(0, parts.length - 1).join('.');
}
function isOfficialWebsite(hostname, fileName, roadmapId) {
fileName = fileName.replace('/index.md', '').replace('.md', '');
const parts = fileName.split('/');
const lastPart = parts[parts.length - 1];
const normalizedFilename = lastPart.replace(/\d+/g, '').replace(/-/g, '');
const normalizedHostname = getHostNameWithoutTld(hostname);
if (normalizedFilename === normalizedHostname) {
return true;
}
if (normalizedFilename.includes(normalizedHostname)) {
return true;
}
return !!roadmapId.includes(normalizedHostname);
}
// websites are educational websites that are of following types:
// - @official@
// - @article@
// - @course@
// - @opensource@
// - @podcast@
// - @video@
// - @website@
// content is only educational websites
function getTypeFromHostname(hostname, fileName, roadmapId) {
hostname = hostname.replace('www.', '');
const videoHostnames = ['youtube.com', 'vimeo.com', 'youtu.be'];
const courseHostnames = ['coursera.org', 'udemy.com', 'edx.org'];
const podcastHostnames = ['spotify.com', 'apple.com'];
const opensourceHostnames = ['github.com', 'gitlab.com'];
const articleHostnames = [
'neilpatel.com',
'learningseo.io',
'htmlreference.io',
'docs.gitlab.com',
'docs.github.com',
'skills.github.com',
'cloudflare.com',
'w3schools.com',
'medium.com',
'dev.to',
'web.dev',
'css-tricks.com',
'developer.mozilla.org',
'smashingmagazine.com',
'freecodecamp.org',
'cs.fyi',
'thenewstack.io',
'html5rocks.com',
'html.com',
'javascript.info',
'css-tricks.com',
'developer.apple.com',
];
if (articleHostnames.includes(hostname)) {
return 'article';
}
if (videoHostnames.includes(hostname)) {
return 'video';
}
if (courseHostnames.includes(hostname)) {
return 'course';
}
if (podcastHostnames.includes(hostname)) {
return 'podcast';
}
if (opensourceHostnames.includes(hostname)) {
return 'opensource';
}
if (hostname === 'roadmap.sh') {
return 'roadmap.sh';
}
if (isOfficialWebsite(hostname, fileName, roadmapId)) {
return 'official';
}
return 'article';
}
function readNestedMarkdownFiles(dir, files = []) {
const dirEnts = fs.readdirSync(dir, { withFileTypes: true });
for (const dirent of dirEnts) {
const fullPath = path.join(dir, dirent.name);
if (dirent.isDirectory()) {
readNestedMarkdownFiles(fullPath, files);
} else {
if (path.extname(fullPath) === '.md') {
files.push(fullPath);
}
}
}
return files;
}
const files = readNestedMarkdownFiles(roadmapDir);
// for each of the files, assign the type of link to the beginning of each markdown link
// i.e. - [@article@abc](xyz) where @article@ is the type of link. Possible types:
// - @official@
// - @opensource@
// - @article@
// - @course@
// - @opensource@
// - @podcast@
// - @video@
files.forEach((file) => {
const content = fs.readFileSync(file, 'utf-8');
const lines = content.split('\n');
const newContent = lines
.map((line) => {
if (line.startsWith('- [') && !line.startsWith('- [@')) {
const type = line.match(/@(\w+)@/);
if (type) {
return line;
}
let urlMatches = line.match(/\((https?:\/\/[^)]+)\)/);
let fullUrl = urlMatches?.[1];
if (!fullUrl) {
// is it slashed URL i.e. - [abc](/xyz)
fullUrl = line.match(/\((\/[^)]+)\)/)?.[1];
if (fullUrl) {
fullUrl = `https://roadmap.sh${fullUrl}`;
}
if (!fullUrl) {
console.error('Invalid URL found in:', file);
return line;
}
}
const url = new URL(fullUrl);
const hostname = url.hostname;
let urlType = getTypeFromHostname(hostname, file, roadmapId);
const linkText = line.match(/\[([^\]]+)\]/)[1];
if (
linkText.toLowerCase().startsWith('visit dedicated') &&
linkText.toLowerCase().endsWith('roadmap')
) {
urlType = 'roadmap';
}
return line.replace('- [', `- [@${urlType}@`).replace('](', '](');
}
return line;
})
.join('\n');
fs.writeFileSync(file, newContent);
});
});

View File

@@ -56,6 +56,7 @@ const pageUrl = `http://localhost:3000/${roadmapId}/svg`;
console.log(`Opening page ${pageUrl}`);
await page.goto(pageUrl);
await page.waitForSelector('#resource-svg-wrap');
await page.waitForTimeout(5000);
console.log(`Generating PDF ${pageUrl}`);
await page.pdf({
path: `./public/pdfs/roadmaps/${roadmapId}.pdf`,

View File

@@ -104,9 +104,9 @@ function writeTopicContent(
) {
let prompt = `I will give you a topic and you need to write a brief introduction for that with regards to "${roadmapTitle}". Your format should be as follows and be in strictly markdown format:
# (Put a heading for the topic without adding parent "Subtopic in Topic" or "Topic in Roadmap" etc.)
# (Put a heading for the topic without adding parent "Subtopic in Topic" or "Topic in Roadmap" or "Subtopic under XYZ" etc.)
(Write me a brief introduction for the topic with regards to "${roadmapTitle}")
(Briefly explain the topic in one paragraph using simple english with regards to "${roadmapTitle}". Don't start with explaining how important the topic is with regard to "${roadmapTitle}". Don't say something along the lines of "XYZ plays a crucial role in ${roadmapTitle}". Don't include anything saying "In the context of ${roadmapTitle}". Instead, start with a simple explanation of the topic itself. For example, if the topic is "React", you can start with "React is a JavaScript library for building user interfaces." and then you can explain how it is used in "${roadmapTitle}".)
`;
if (!parentTopic) {

View File

@@ -44,6 +44,7 @@ export interface UserDocument {
github?: string;
linkedin?: string;
twitter?: string;
dailydev?: string;
website?: string;
};
username?: string;

View File

@@ -15,6 +15,10 @@ export const allowedLinkTypes = [
'course',
'website',
'podcast',
'roadmap.sh',
'official',
'roadmap',
'feed'
] as const;
export type AllowedLinkTypes = (typeof allowedLinkTypes)[number];

View File

@@ -0,0 +1,15 @@
import type { SVGProps } from 'react';
export function DailyDevIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg viewBox="0 0 32 18" xmlns="http://www.w3.org/2000/svg" {...props}>
<g fill="currentColor" fillRule="nonzero">
<path
d="M26.633 8.69l-3.424-3.431 1.711-3.43 5.563 5.575c.709.71.709 1.861 0 2.572l-6.847 6.86c-.709.711-1.858.711-2.567 0a1.821 1.821 0 010-2.571l5.564-5.575z"
fillOpacity="0.64"
></path>
<path d="M21.07.536a1.813 1.813 0 012.568 0l1.283 1.286L9.945 16.83c-.709.71-1.858.71-2.567 0l-1.284-1.287L21.071.536zm-6.418 4.717l-2.567 2.572-3.424-3.43-4.28 4.288 3.424 3.43-1.71 3.43L.531 9.97a1.821 1.821 0 010-2.572L7.378.537A1.813 1.813 0 019.945.535l4.707 4.717z"></path>
</g>
</svg>
);
}

View File

@@ -4,9 +4,15 @@ import {
type RoadmapRendererProps,
} from './EditorRoadmapRenderer';
import { Spinner } from '../ReactIcons/Spinner';
import type { ResourceType } from '../../lib/resource-progress';
import {
clearMigratedRoadmapProgress,
type ResourceType,
} from '../../lib/resource-progress';
import { httpGet } from '../../lib/http';
import { ProgressNudge } from '../FrameRenderer/ProgressNudge';
import { getUrlParams } from '../../lib/browser.ts';
import { cn } from '../../lib/classname.ts';
import { getUser } from '../../lib/jwt.ts';
type EditorRoadmapProps = {
resourceId: string;
@@ -20,6 +26,7 @@ type EditorRoadmapProps = {
export function EditorRoadmap(props: EditorRoadmapProps) {
const { resourceId, resourceType = 'roadmap', dimensions } = props;
const [hasSwitchedRoadmap, setHasSwitchedRoadmap] = useState(false);
const [isLoading, setIsLoading] = useState(true);
const [roadmapData, setRoadmapData] = useState<
Omit<RoadmapRendererProps, 'resourceId'> | undefined
@@ -27,9 +34,11 @@ export function EditorRoadmap(props: EditorRoadmapProps) {
const loadRoadmapData = async () => {
setIsLoading(true);
const { r: switchRoadmapId } = getUrlParams();
const { response, error } = await httpGet<
Omit<RoadmapRendererProps, 'resourceId'>
>(`/${resourceId}.json`);
>(`/${switchRoadmapId || resourceId}.json`);
if (error) {
console.error(error);
@@ -38,21 +47,29 @@ export function EditorRoadmap(props: EditorRoadmapProps) {
setRoadmapData(response);
setIsLoading(false);
setHasSwitchedRoadmap(!!switchRoadmapId);
};
useEffect(() => {
clearMigratedRoadmapProgress(resourceType, resourceId);
loadRoadmapData().finally();
}, [resourceId]);
const aspectRatio = dimensions.width / dimensions.height;
if (!roadmapData || isLoading) {
return (
<div
style={
{
'--aspect-ratio': dimensions.width / dimensions.height,
} as CSSProperties
!hasSwitchedRoadmap
? ({
'--aspect-ratio': aspectRatio,
} as CSSProperties)
: undefined
}
className={
'flex aspect-[var(--aspect-ratio)] w-full flex-col justify-center'
}
className="flex aspect-[var(--aspect-ratio)] w-full justify-center"
>
<div className="flex w-full justify-center">
<Spinner
@@ -68,11 +85,15 @@ export function EditorRoadmap(props: EditorRoadmapProps) {
return (
<div
style={
{
'--aspect-ratio': dimensions.width / dimensions.height,
} as CSSProperties
!hasSwitchedRoadmap
? ({
'--aspect-ratio': aspectRatio,
} as CSSProperties)
: undefined
}
className={
'flex aspect-[var(--aspect-ratio)] w-full flex-col justify-center'
}
className="flex aspect-[var(--aspect-ratio)] w-full justify-center"
>
<EditorRoadmapRenderer
{...roadmapData}

View File

@@ -7,21 +7,24 @@ svg text tspan {
svg > g[data-type='topic'],
svg > g[data-type='subtopic'],
svg g[data-type='link-item'],
svg > g[data-type='button'] {
svg > g[data-type='button'],
svg > g[data-type='resourceButton'],
svg > g[data-type='todo-checkbox'],
svg > g[data-type='todo'] {
cursor: pointer;
}
svg > g[data-type='topic']:hover > rect {
fill: #d6d700;
fill: var(--hover-color);
}
svg > g[data-type='subtopic']:hover > rect {
fill: #f3c950;
fill: var(--hover-color);
}
svg > g[data-type='button']:hover {
opacity: 0.8;
}
svg g[data-type='link-item']:hover {
svg g[data-type='button']:hover,
svg g[data-type='link-item']:hover,
svg g[data-type='resourceButton']:hover,
svg g[data-type='todo-checkbox']:hover {
opacity: 0.8;
}

View File

@@ -45,7 +45,15 @@ function getNodeDetails(svgElement: SVGElement): RoadmapNodeDetails | null {
return { nodeId, nodeType, targetGroup, title };
}
const allowedNodeTypes = ['topic', 'subtopic', 'button', 'link-item'];
const allowedNodeTypes = [
'topic',
'subtopic',
'button',
'link-item',
'resourceButton',
'todo',
'todo-checkbox',
];
export function EditorRoadmapRenderer(props: RoadmapRendererProps) {
const { resourceId, nodes = [], edges = [] } = props;
@@ -90,7 +98,11 @@ export function EditorRoadmapRenderer(props: RoadmapRendererProps) {
return;
}
if (nodeType === 'button' || nodeType === 'link-item') {
if (
nodeType === 'button' ||
nodeType === 'link-item' ||
nodeType === 'resourceButton'
) {
const link = targetGroup?.dataset?.link || '';
const isExternalLink = link.startsWith('http');
if (isExternalLink) {
@@ -104,6 +116,20 @@ export function EditorRoadmapRenderer(props: RoadmapRendererProps) {
const isCurrentStatusLearning = targetGroup?.classList.contains('learning');
const isCurrentStatusSkipped = targetGroup?.classList.contains('skipped');
if (nodeType === 'todo-checkbox') {
e.preventDefault();
if (!isLoggedIn()) {
showLoginPopup();
return;
}
const newStatus = targetGroup?.classList.contains('done')
? 'pending'
: 'done';
updateTopicStatus(nodeId, newStatus);
return;
}
if (e.shiftKey) {
e.preventDefault();
if (!isLoggedIn()) {

View File

@@ -51,7 +51,7 @@ export function ProgressNudge(props: ProgressNudgeProps) {
<span className="relative -top-[0.45px] mr-2 text-xs font-medium uppercase text-yellow-400">
Progress
</span>
<span>{done}</span> of <span>{$totalRoadmapNodes}</span> Done
<span>{done > $totalRoadmapNodes ? $totalRoadmapNodes : done}</span> of <span>{$totalRoadmapNodes}</span> Done
</span>
<span

View File

@@ -152,6 +152,10 @@ export class Renderer {
return;
}
if (/^check:/.test(topicId)) {
topicId = topicId.replace('check:', '');
}
pageProgressMessage.set('Updating progress');
updateResourceProgress(
{

View File

@@ -24,7 +24,7 @@ const discordInfo = await getDiscordInfo();
class='mt-5 grid grid-cols-1 justify-between gap-2 divide-x-0 sm:my-11 sm:grid-cols-3 sm:gap-0 sm:divide-x mb-4 sm:mb-0'
>
<OpenSourceStat text='GitHub Stars' value={starCount} />
<OpenSourceStat text='Registered Users' value={'850k'} />
<OpenSourceStat text='Registered Users' value={'+1M'} />
<OpenSourceStat
text='Discord Members'
value={discordInfo.totalFormatted}

View File

@@ -28,7 +28,7 @@ const isDiscordMembers = text.toLowerCase() === 'discord members';
{
isRegistered && (
<p class='flex items-center text-sm text-blue-500 sm:flex'>
<span class='mr-1.5 rounded-md bg-blue-500 px-1 text-white'>+55k</span>
<span class='mr-1.5 rounded-md bg-blue-500 px-1 text-white'>+75k</span>
every month
</p>
)
@@ -44,7 +44,7 @@ const isDiscordMembers = text.toLowerCase() === 'discord members';
}
<div class="flex flex-row items-center sm:flex-col my-1 sm:my-0">
<p
class='relative my-0 sm:my-4 mr-1 sm:mr-0 text-base font-bold lowercase sm:w-auto sm:text-5xl'
class='relative my-0 sm:my-4 mr-1 sm:mr-0 text-base font-bold sm:w-auto sm:text-5xl'
>
{value}
</p>

View File

@@ -4,6 +4,8 @@ import { sponsorHidden } from '../stores/page';
import { useStore } from '@nanostores/react';
import { X } from 'lucide-react';
import { setViewSponsorCookie } from '../lib/jwt';
import { isMobile } from '../lib/is-mobile';
import Cookies from 'js-cookie';
export type PageSponsorType = {
company: string;
@@ -25,6 +27,22 @@ type PageSponsorProps = {
gaPageIdentifier?: string;
};
const CLOSE_SPONSOR_KEY = 'sponsorClosed';
function markSponsorHidden(sponsorId: string) {
Cookies.set(`${CLOSE_SPONSOR_KEY}-${sponsorId}`, '1', {
path: '/',
expires: 1,
sameSite: 'lax',
secure: true,
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}
function isSponsorMarkedHidden(sponsorId: string) {
return Cookies.get(`${CLOSE_SPONSOR_KEY}-${sponsorId}`) === '1';
}
export function PageSponsor(props: PageSponsorProps) {
const { gaPageIdentifier } = props;
const $isSponsorHidden = useStore(sponsorHidden);
@@ -50,6 +68,7 @@ export function PageSponsor(props: PageSponsorProps) {
`${import.meta.env.PUBLIC_API_URL}/v1-get-sponsor`,
{
href: window.location.pathname,
mobile: isMobile() ? 'true' : 'false',
},
);
@@ -58,12 +77,16 @@ export function PageSponsor(props: PageSponsorProps) {
return;
}
if (!response?.sponsor) {
if (
!response?.sponsor ||
!response.id ||
isSponsorMarkedHidden(response.id)
) {
return;
}
setSponsor(response.sponsor);
setSponsorId(response?.id || null);
setSponsorId(response.id);
window.fireEvent({
category: 'SponsorImpression',
@@ -75,9 +98,15 @@ export function PageSponsor(props: PageSponsorProps) {
};
const clickSponsor = async (sponsorId: string) => {
const { response, error } = await httpPatch<{ status: 'ok' }>(
const clickUrl = new URL(
`${import.meta.env.PUBLIC_API_URL}/v1-view-sponsor/${sponsorId}`,
{},
);
const { response, error } = await httpPatch<{ status: 'ok' }>(
clickUrl.toString(),
{
mobile: isMobile(),
},
);
if (error || !response) {
@@ -103,7 +132,7 @@ export function PageSponsor(props: PageSponsorProps) {
href={url}
target="_blank"
rel="noopener sponsored nofollow"
className="fixed bottom-[15px] right-[15px] z-50 flex max-w-[350px] bg-white shadow-lg outline-0 outline-transparent"
className="fixed bottom-0 left-0 right-0 z-50 flex bg-white shadow-lg outline-0 outline-transparent sm:bottom-[15px] sm:left-auto sm:right-[15px] sm:max-w-[350px]"
onClick={async () => {
window.fireEvent({
category: 'SponsorClick',
@@ -114,26 +143,32 @@ export function PageSponsor(props: PageSponsorProps) {
}}
>
<span
className="absolute right-1.5 top-1.5 text-gray-300 hover:text-gray-800"
className="absolute right-1 top-1 text-gray-400 hover:text-gray-800 sm:right-1.5 sm:top-1.5 sm:text-gray-300"
aria-label="Close"
onClick={(e) => {
e.preventDefault();
markSponsorHidden(sponsorId || '');
sponsorHidden.set(true);
}}
>
<X className="h-4 w-4" />
<X className="h-5 w-5 sm:h-4 sm:w-4" />
</span>
<img
src={imageUrl}
className="block h-[150px] object-cover lg:h-[169px] lg:w-[118.18px]"
alt="Sponsor Banner"
/>
<span className="flex flex-1 flex-col justify-between text-sm">
<span>
<img
src={imageUrl}
className="block h-[106px] object-cover sm:h-[169px] sm:w-[118.18px]"
alt="Sponsor Banner"
/>
</span>
<span className="flex flex-1 flex-col justify-between text-xs sm:text-sm">
<span className="p-[10px]">
<span className="mb-0.5 block font-semibold">{title}</span>
<span className="block text-gray-500">{description}</span>
</span>
<span className="sponsor-footer">Partner Content</span>
<span className="sponsor-footer hidden sm:block">Partner Content</span>
<span className="block pb-1 text-center text-[10px] uppercase text-gray-400 sm:hidden">
Partner Content
</span>
</span>
</a>
);

View File

@@ -24,9 +24,6 @@ const relatedQuestionDetails = await getQuestionGroupsByIds(relatedQuestions);
<span class='text-md flex items-center rounded-md border bg-white px-3 py-1 font-medium'>
<Clipboard className='mr-1.5 text-black' size='17px' />
Test your Knowledge
<span class='ml-2 rounded-md border border-yellow-300 bg-yellow-100 px-1 py-0.5 text-xs uppercase'>
New
</span>
</span>
<a
href='/questions'

View File

@@ -222,6 +222,12 @@ const groups: GroupType[] = [
type: 'skill',
otherGroups: ['Web Development'],
},
{
title: 'Terraform',
link: '/terraform',
type: 'skill',
otherGroups: ['Web Development'],
},
],
},
{
@@ -310,6 +316,16 @@ const groups: GroupType[] = [
link: '/technical-writer',
type: 'role',
},
{
title: 'Product Manager',
link: '/product-manager',
type: 'role',
},
{
title: 'DevRel Engineer',
link: '/devrel',
type: 'role',
},
],
},
{

View File

@@ -24,7 +24,7 @@ import type {
import { markdownToHtml, sanitizeMarkdown } from '../../lib/markdown';
import { cn } from '../../lib/classname';
import { Ban, FileText, HeartHandshake, X } from 'lucide-react';
import { getUrlParams } from '../../lib/browser';
import { getUrlParams, parseUrl } from '../../lib/browser';
import { Spinner } from '../ReactIcons/Spinner';
import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx';
import { GoogleIcon } from '../ReactIcons/GoogleIcon.tsx';
@@ -40,12 +40,16 @@ type TopicDetailProps = {
};
const linkTypes: Record<AllowedLinkTypes, string> = {
article: 'bg-yellow-200',
course: 'bg-green-200',
opensource: 'bg-black-200 text-white',
podcast: 'bg-purple-200',
video: 'bg-pink-300',
article: 'bg-yellow-300',
course: 'bg-green-400',
opensource: 'bg-black text-white',
'roadmap.sh': 'bg-black text-white',
roadmap: 'bg-black text-white',
podcast: 'bg-purple-300',
video: 'bg-purple-300',
website: 'bg-blue-300',
official: 'bg-blue-600 text-white',
feed: "bg-[#ce3df3] text-white"
};
export function TopicDetail(props: TopicDetailProps) {
@@ -176,29 +180,56 @@ export function TopicDetail(props: TopicDetailProps) {
const contributionUrl = urlElem?.dataset?.githubUrl || '';
const titleElem: HTMLElement = topicDom.querySelector('h1')!;
const otherElems = topicDom.querySelectorAll('body > *:not(h1, div)');
const listLinks = Array.from(
topicDom.querySelectorAll('ul > li > a'),
).map((link, counter) => {
const typePattern = /@([a-z]+)@/;
let linkText = link.textContent || '';
const linkHref = link.getAttribute('href') || '';
const linkType = linkText.match(typePattern)?.[1] || 'article';
linkText = linkText.replace(typePattern, '');
let ulWithLinks: HTMLUListElement = document.createElement('ul');
return {
id: `link-${linkHref}-${counter}`,
title: linkText,
url: linkHref,
type: linkType as AllowedLinkTypes,
};
// we need to remove the `ul` with just links (i.e. resource links)
// and show them separately.
topicDom.querySelectorAll('ul').forEach((ul) => {
const lisWithJustLinks = Array.from(
ul.querySelectorAll('li'),
).filter((li) => {
return (
li.children.length === 1 &&
li.children[0].tagName === 'A' &&
li.children[0].textContent === li.textContent
);
});
if (lisWithJustLinks.length > 0) {
ulWithLinks = ul;
}
});
const lastUl = topicDom.querySelector('ul:last-child');
if (lastUl) {
lastUl.remove();
const listLinks = Array.from(ulWithLinks.querySelectorAll('li > a'))
.map((link, counter) => {
const typePattern = /@([a-z.]+)@/;
let linkText = link.textContent || '';
const linkHref = link.getAttribute('href') || '';
const linkType = linkText.match(typePattern)?.[1] || 'article';
linkText = linkText.replace(typePattern, '');
return {
id: `link-${linkHref}-${counter}`,
title: linkText,
url: linkHref,
type: linkType as AllowedLinkTypes,
};
})
.sort((a, b) => {
// official at the top
// opensource at second
// article at third
// videos at fourth
// rest at last
const order = ['official', 'opensource', 'article', 'video', 'feed'];
return order.indexOf(a.type) - order.indexOf(b.type);
});
if (ulWithLinks) {
ulWithLinks.remove();
}
topicHtml = topicDom.body.innerHTML;
@@ -335,7 +366,7 @@ export function TopicDetail(props: TopicDetailProps) {
className="flex w-full items-center justify-center rounded-md bg-gray-800 p-2 text-sm text-white transition-colors hover:bg-black hover:text-white disabled:bg-green-200 disabled:text-black"
>
<GitHubIcon className="mr-2 inline-block h-4 w-4 text-white" />
Edit this Content
Add Learning Resources
</a>
</div>
)}
@@ -350,18 +381,36 @@ export function TopicDetail(props: TopicDetailProps) {
<a
href={link.url}
target="_blank"
className="font-medium underline"
className="group font-medium text-gray-800 underline underline-offset-1 hover:text-black"
onClick={() => {
// if it is one of our roadmaps, we want to track the click
if (canSubmitContribution) {
const parsedUrl = parseUrl(link.url);
window.fireEvent({
category: 'TopicResourceClick',
action: `Click: ${parsedUrl.hostname}`,
label: `${resourceType} / ${resourceId} / ${topicId} / ${link.url}`,
});
}
}}
>
<span
className={cn(
'mr-2 inline-block rounded px-1.5 py-1 text-xs uppercase no-underline',
'mr-2 inline-block rounded px-1.5 py-0.5 text-xs uppercase no-underline',
link.type in linkTypes
? linkTypes[link.type]
: 'bg-gray-200',
)}
>
{link.type.charAt(0).toUpperCase() +
link.type.slice(1)}
{link.type === 'opensource' ? (
<>
{link.url.includes('github') && 'GitHub'}
{link.url.includes('gitlab') && 'GitLab'}
</>
) : (
link.type
)}
</span>
{link.title}
</a>
@@ -372,8 +421,8 @@ export function TopicDetail(props: TopicDetailProps) {
)}
{/* Contribution */}
{canSubmitContribution && !hasEnoughLinks && contributionUrl && (
<div className="mb-12 mt-3 border-t text-sm text-gray-400">
{canSubmitContribution && !hasEnoughLinks && contributionUrl && hasContent && (
<div className="mb-12 mt-3 border-t text-sm text-gray-400 sm:mt-12">
<div className="mb-4 mt-3">
<p className="">
Find more resources using these pre-filled search queries:
@@ -409,7 +458,7 @@ export function TopicDetail(props: TopicDetailProps) {
className="flex w-full items-center justify-center rounded-md bg-gray-800 p-2 text-sm text-white transition-colors hover:bg-black hover:text-white disabled:bg-green-200 disabled:text-black"
>
<GitHubIcon className="mr-2 inline-block h-4 w-4 text-white" />
Edit this Content
Add Learning Resources
</a>
</div>
)}

View File

@@ -9,7 +9,8 @@ import type {
} from '../../api/user';
import { SelectionButton } from '../RoadCard/SelectionButton';
import {
ArrowUpRight, Check,
ArrowUpRight,
Check,
CheckCircle,
Copy,
Eye,
@@ -64,6 +65,7 @@ export function UpdatePublicProfileForm() {
const [github, setGithub] = useState('');
const [twitter, setTwitter] = useState('');
const [linkedin, setLinkedin] = useState('');
const [dailydev, setDailydev] = useState('');
const [website, setWebsite] = useState('');
const [profileRoadmaps, setProfileRoadmaps] = useState<RoadmapType[]>([]);
@@ -94,6 +96,7 @@ export function UpdatePublicProfileForm() {
website,
name,
email,
dailydev,
},
);
@@ -141,6 +144,7 @@ export function UpdatePublicProfileForm() {
setGithub(links?.github || '');
setTwitter(links?.twitter || '');
setLinkedin(links?.linkedin || '');
setDailydev(links?.dailydev || '');
setWebsite(links?.website || '');
setProfileVisibility(defaultProfileVisibility || 'public');
setHeadline(publicConfig?.headline || '');
@@ -528,6 +532,23 @@ export function UpdatePublicProfileForm() {
onChange={(e) => setLinkedin((e.target as HTMLInputElement).value)}
/>
</div>
<div className="flex w-full flex-col">
<label
htmlFor="dailydev"
className="text-sm leading-none text-slate-500"
>
daily.dev
</label>
<input
type="text"
name="dailydev"
id="dailydev"
className="mt-2 block w-full rounded-lg border border-gray-300 px-3 py-2 shadow-sm outline-none placeholder:text-gray-400 focus:ring-2 focus:ring-black focus:ring-offset-1"
placeholder="https://app.daily.dev/username"
value={dailydev}
onChange={(e) => setDailydev((e.target as HTMLInputElement).value)}
/>
</div>
<div className="flex w-full flex-col">
<label

View File

@@ -1,5 +1,12 @@
import { Github, Globe, LinkedinIcon, Mail, Twitter } from 'lucide-react';
import {
Github,
Globe,
LinkedinIcon,
Mail,
Twitter,
} from 'lucide-react';
import type { GetPublicProfileResponse } from '../../api/user';
import { DailyDevIcon } from '../DailyDevIcon';
type UserPublicProfileHeaderProps = {
userDetails: GetPublicProfileResponse;
@@ -12,7 +19,7 @@ export function UserPublicProfileHeader(props: UserPublicProfileHeaderProps) {
const { headline, isAvailableForHire, isEmailVisible } = publicConfig!;
return (
<div className="flex items-center gap-6 container bg-white border p-8 rounded-xl">
<div className="container flex items-center gap-6 rounded-xl border bg-white p-8">
<img
src={
avatar
@@ -37,6 +44,9 @@ export function UserPublicProfileHeader(props: UserPublicProfileHeaderProps) {
<UserLink href={links?.linkedin} icon={LinkedinIcon} />
)}
{links?.twitter && <UserLink href={links?.twitter} icon={Twitter} />}
{links?.dailydev && (
<UserLink href={links?.dailydev} icon={DailyDevIcon} />
)}
{links?.website && <UserLink href={links?.website} icon={Globe} />}
{isEmailVisible && <UserLink href={`mailto:${email}`} icon={Mail} />}
</div>
@@ -47,7 +57,7 @@ export function UserPublicProfileHeader(props: UserPublicProfileHeaderProps) {
type UserLinkProps = {
href: string;
icon: typeof Github;
icon: ((props: React.SVGProps<SVGSVGElement>) => JSX.Element) | typeof Globe;
};
export function UserLink(props: UserLinkProps) {

13
src/data/authors/ekene.md Normal file
View File

@@ -0,0 +1,13 @@
---
name: 'Ekene Eze'
imageUrl: '/authors/ekene-eze.jpg'
employment:
title: 'Author'
company: 'roadmap.sh'
social:
linkedin: 'https://www.linkedin.com/in/ekeneeze/'
twitter: 'https://x.com/kenny_io'
website: 'https://kenny.engineer/'
---
Kenny is a Software Engineer and Developer Advocate with over 5 years experience working in DevRel across different functions. Recently as a Senior Developer Experience Engineer at Netlify and leading DevRel teams in others.

View File

@@ -0,0 +1,12 @@
---
name: 'William Imoh'
imageUrl: '/authors/william-imoh.jpg'
employment:
title: 'Author'
company: 'roadmap.sh'
social:
linkedin: 'https://www.linkedin.com/in/william-imoh/'
twitter: 'https://x.com/iChuloo'
---
William is a Software Engineer, Developer Advocate and Product Manager turned Entrepreneur. He leads the team at **Hackmamba** and occasionally talks about building performant web experiences.

View File

@@ -7,7 +7,7 @@ seo:
title: '20 Backend Project Ideas to take you from Beginner to Pro'
description: 'Seeking backend projects to enhance your skills? Explore our top 20 project ideas, from simple apps to complex systems. Start building today!'
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-project-ideas-ovr48.jpg'
isNew: true
isNew: false
type: 'textual'
date: 2024-05-09
sitemap:

View File

@@ -0,0 +1,166 @@
---
title: 'DevOps vs SRE: Key Differences Explained'
description: 'DevOps vs SRE: Discover which role suits your career best. Learn key differences, skills required, and career prospects in our detailed guide.'
authorId: william
excludedBySlug: '/devops/devops-vs-sre'
seo:
title: 'DevOps vs SRE: Key Differences Explained'
description: 'DevOps vs SRE: Discover which role suits your career best. Learn key differences, skills required, and career prospects in our detailed guide.'
ogImageUrl: 'https://assets.roadmap.sh/guest/devops-vs-sre-ofdcy.jpg'
isNew: true
type: 'textual'
date: 2024-06-13
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
When it comes to managing and enhancing software development and operations, companies often adopt sets of practices and processes such as Development Operations (DevOps) or Site Reliability Engineering (SRE). These approaches increase their ability to deliver applications scalably and maintain a fast pace.
In fact, companies and individuals seeking to deliver applications and services at a higher velocity are increasingly moving away from traditional software development and infrastructure management. They achieve this by either combining selected DevOps and SRE practices or opting for one over the other.
Despite their shared goal of improving the software delivery process, some nuances set DevOps and SRE apart.
This article provides an in-depth discussion of the key differences between each approach, what they entail, similarities, and the tools and technologies involved. Finally, it offers roadmaps for your DevOps or SRE journey.
## Differences between DevOps and SRE
The main difference between [DevOps](https://roadmap.sh/devops) and SRE lies in their primary **goals**. DevOps aims to improve the software development lifecycle (SDLC), while SRE **focuses** on maintaining stability and resilience after application deployment. In addition, they also differ in **scope**, **metrics**, and **team structure**.
Lets look at these points in detail:
1. **Goals:** DevOps' primary goal is to improve the (SDLC) through process automation, enhance collaboration, and promote continuous improvement. SRE aims to create easily maintained systems by automating repetitive and manual tasks, implementing monitoring and alerting systems, and designing for scale and resilience.
2. **Roles and ownership:** In DevOps, developers, and other related stakeholders are often involved in operational tasks, sharing ownership of the entire software delivery process from development through to production. In contrast, the SRE model promotes a clear separation between development and operations. The development team is focused on building and maintaining features, while the SRE team is responsible for the reliability and availability of services.
3. **Scope and mindset:** DevOps is typically applied to self-contained applications or services, encouraging experimentation and innovation with opportunities to learn from failures. In contrast, SRE is applied to entire systems and platforms, primarily focusing on minimizing human errors and downtime.
4. **Metrics:** In measuring success, DevOps tracks metrics such as the time from code commit to deployment, deployment frequency, failure rate, and overall system performance. On the other hand, SRE focuses on metrics related to service level objectives like Mean Time to Recover (MTTR), Mean Time Between Failures (MTBF), latency, traffic, and the frequency of errors occurring in the system.
5. **Team structure and processes:** DevOps teams work more like an Agile development team, collaborating with members across development and operations. They often break projects into smaller features and use [continuous integration(CI) and continuous delivery (CD)](https://roadmap.sh/guides/ci-cd) to prioritize delivery based on business needs.
In contrast, SRE teams are highly specialized teams as compared to DevOps. They see the production environment as a highly available service and implement measures to address threats and failures that may arise from deployed features and integrations.
Both DevOps and SRE aim to enhance software development and operations. DevOps primarily focuses on software development and delivery, while SRE concentrates on software operations and maintenance after deployment, emphasizing reliability and scalability strongly.
## Key components of DevOps
According to [Statista](https://www.statista.com/statistics/1234098/software-development-process-changes/), DevOps adoption is expected to grow, with **21% of respondents having integrated it into their source code management**. Recruiters are also actively hiring for DevOps roles, [**with demand currently at 35.5%**](https://www.statista.com/statistics/1296668/top-in-demand-tech-skills-worldwide/)**.**
One core principle of DevOps is automating manual processes within the SDLC, focusing on reducing costs and minimizing errors. In addition, DevOps embraces continuous integration, enabling companies to adapt and accommodate changes to end-users' needs or business expansions.
The following are key aspects of DevOps:
### CI and CD
One of the fundamental principles of DevOps is to facilitate faster release cycles for software. This is achieved by continuously integrating code into a repository and automatically deploying it to the required environment.
### Automation
Development processes such as testing, deployment, and infrastructural provisioning can be tedious, error-prone, and manual. DevOps addresses these challenges through automation.
### Monitoring
Monitoring application performance, health, availability, and customer experience are some of the key principles of DevOps. With this capability, companies can identify issues quickly, iterate on solutions, and continuously improve.
### Collaboration and communication
The overall goal of shipping secure and reliable software involves stakeholders like the developments, operations, and other relevant teams to adhere to DevOps practices of collaborating and actively communicating throughout the SDLC.
### Infrastructure as Code
Using scripts or declarative definitions to provision and configure infrastructure is a key component in DevOps. This approach enables teams to be consistent, efficiently manage resources, and reproduce environment-specific bugs.
### Continuous learning and improvement
In DevOps, teams are encouraged to share knowledge across teams, conduct service failure postmortem, and experiment with new ideas and potential solutions.
## Key components of SRE
SRE can function as a tool, a set of best practices, or a strategy to automate IT operations tasks such as production system management, change management, and incident response. It empowers system administrators to manage large systems using code rather than manual methods.
The following are the key aspects of SRE:
### Automation
One key principle followed by SRE is establishing a workflow to reduce manual and repetitive work related to operational tasks.
### Monitoring and alerting
A core principle of SRE is using real-time monitored metrics and alerts to detect and respond to issues promptly. With these systems in place, SRE teams can diagnose and resolve potential issues before they impact the system.
### Forecast and planning
Due to user traffic and workload, systems can experience increased demand and heavy resource usage. SRE implements measures to ensure that such demand is properly handled by forecasting resources and managing related infrastructure.
### Incident management
SRE teams define clear processes for detecting, diagnosing, and resolving incidents. When incidents occur, postmortems are conducted to identify root causes and prevent similar issues from recurring.
### Service Level Objectives (SLOs)
SRE aims to deliver higher availability percentages, uptime, and other metrics such as error rates and response time to system customers or users.
## Similarities between DevOps and SRE
DevOps and SRE principles have become popular and widely adopted by organizations because they create robust and bug-free systems with continuous improvement in mind. Below are some key similarities between DevOps and SRE:
- Both advocate automating repetitive tasks like testing, deployment, monitoring, etc.
- They promote the use of CI and CD for software releases
- There is a strong emphasis on real-time monitoring and collection of metrics for diagnosis and performance monitoring
- Both focus on collaboration and encourage a culture of continuous learning and improvement
- They prioritize building systems with a great user experience, quick recovery from disruptions, and reliability.
## What is the role of a DevOps engineer?
[DevOps engineers](https://roadmap.sh/devops) are integral to any organization looking to bridge the gap between development and operations. They collaborate closely with developers, quality assurance teams, and other stakeholders to achieve this goal. Here are some key responsibilities of a DevOps engineer:
- Adopts the agile methodology and automation to remove bottlenecks in the SDLC
- Set up monitoring and logging mechanisms to track the performance, availability, and health of systems
- Provision resources, deploy, and manage applications on cloud platforms like [AWS](https://roadmap.sh/aws), Azure, Google Cloud, etc
- Creates standards and manages configuration to enforce and maintain system integrity across multiple environments
- Creates a plan to optimize system performance and resource utilization
- Promotes knowledge sharing by carefully documenting processes, procedures, and best practices
To perform these responsibilities, the DevOps team uses many tools to automate and improve their workflow. Here are some of the tools commonly used:
- **Docker:** [Docker](https://roadmap.sh/docker) is an open-source platform that enables developers to build, deploy, and run containerized applications.
- **Kubernetes:** [Kubernetes](https://roadmap.sh/kubernetes) is an open-source orchestration platform for automating the deployment, scaling, and managing containerized applications
- **Jenkins:** Jenkins is an automation server used for performing CI and CD in a software project
- **Git:** Git is a distributed version control system for tracking changes in source code during development
- **Prometheus:** Prometheus is an open-source application for event monitoring and alerting.
- **Grafana:** Grafana is an open-source analytics and visualization application
- **Ansible:** Ansible is an open-source engine for automating resource provision, configuration management, application deployment, and other IT-related tasks
## What is the role of an SRE engineer?
Similar to the DevOps team, SRE engineers are also an integral part of any organization looking to build systems and services that are reliable, available, scalable, and performant. Here are some key responsibilities of an SRE engineer:
- Responsible for maintaining and ensuring system reliability and uptime
- Collaborate with the development team to design and architect applications
- Automate tasks by developing tools and scripts for deployment, alerting, and incident response
- Analyze and plan resources to cater for future growth and scale
- Creates plans to mitigate or eliminate events or system failures
- Promotes knowledge sharing by documenting system configuration, procedures, and best practices
To perform these responsibilities, the SRE team uses various tools to tackle infrastructure and operational problems. Here are some of the tools commonly used:
- **Kibana:** Kibana is an open-source data visualization platform for monitoring metrics and events
- **Datadog:** Datadog is a cloud monitoring tool for events, infrastructure hosts, and much more
- **NetApp Cloud Insights:** NetApp Cloud Insights is a tool used to monitor IT infrastructure
- **Terraform:** Terraform is an infrastructure as code tool used to automate infrastructure tasks
- **Ansible:** Ansible is an open-source engine for automating resource provision, configuration management, application deployment, and other IT-related tasks
- **New Relic:** New Relic is a cloud-based full-stack observability platform for monitoring and analyzing metrics
- **Opsgenie:** Opsgenie is an incident response solution with functionalities like on-call scheduling, reporting, analytics, and alerting
In summary, DevOps focuses on developing and delivering software, and SRE works on the deployed software to ensure it functions as intended and is reliable. They both have similarities and differences that organizations actively adopt when building and maintaining scalable applications.
Whether you're an experienced developer aiming to improve your skills or a beginner exploring a career as a DevOps or SRE engineer, you might have seen tons of resources available online and maybe get overwhelmed without a clear path on the way to go. Well, not anymore, roadmap.sh provides a comprehensive guide on any of the career paths you choose to follow. You will be able to:
- Stay updated with a new roadmap, track your progress, and share it on your roadmap.sh profile
- Learn with like-minded individuals by joining a supportive community when you [sign up](https://roadmap.sh/signup) on roadmap.sh platform
- [Generate a new roadmap](https://roadmap.sh/ai) with AI.

View File

@@ -1,13 +1,13 @@
---
title: 'What Front End Programming Languages Should You Learn?'
description: 'Get ahead in web development. Discover the essential frontend languages every pro developer uses!'
authorId: kamran
authorId: william
excludedBySlug: '/frontend/languages'
seo:
title: 'What Front End Programming Languages Should You Learn?'
description: 'Get ahead in web development. Discover the essential frontend languages every pro developer uses!'
ogImageUrl: 'https://assets.roadmap.sh/guest/best-front-end-languages-exm6g.jpg'
isNew: true
isNew: false
type: 'textual'
date: 2024-05-02
sitemap:

View File

@@ -1,13 +1,13 @@
---
title: 'Full Stack Developer or Software Engineer Which Way to Go?'
description: 'Unsure about your dev career path? Compare full stack developer and software engineer roles to make an informed decision.'
authorId: kamran
authorId: william
excludedBySlug: '/full-stack/vs-software-engineer'
seo:
title: 'Full Stack Developer or Software Engineer Which Way to Go?'
description: 'Unsure about your dev career path? Compare full stack developer and software engineer roles to make an informed decision.'
ogImageUrl: 'https://assets.roadmap.sh/guest/full-stack-developer-vs-software-engineer-yy0dk.jpg'
isNew: true
isNew: false
type: 'textual'
date: 2024-05-02
sitemap:

View File

@@ -0,0 +1,178 @@
---
title: 'How to become a DevOps Engineer in @currentYear@'
description: 'Want to become a DevOps engineer? Our @currentYear@ guide covers skills, certifications, and expert career advice. Start your journey today!'
authorId: william
excludedBySlug: '/devops/how-to-become-devops-engineer'
seo:
title: 'How to become a DevOps Engineer in @currentYear@'
description: 'Want to become a DevOps engineer? Our @currentYear@ guide covers skills, certifications, and expert career advice. Start your journey today!'
ogImageUrl: 'https://assets.roadmap.sh/guest/how-to-become-devops-engineer-3opju.jpg'
isNew: true
type: 'textual'
date: 2024-06-11
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
If you are trying to get into tech or are already in tech and have been exploring roles across the industry, you must have come across Development and Operations (DevOps). In fact, DevOps is one of the highest-paying roles in the tech industry. But **what is DevOps, and how is it different from other roles?**
**DevOps is a software engineering approach that combines development (Dev) and operations (Ops) to shorten the software development lifecycle** (feature development, bug fixes, updates) by embracing automation. It is a bridge between the development and the operations team. While the primary goal of a software engineer is to design and build software solutions, a DevOps engineer has a key role in streamlining the software delivery pipeline, automating infrastructure provisioning, and enhancing the deployment process.
This article provides in-depth knowledge on how to become a DevOps engineer, highlighting the mindset and technical skills(including DevOps tools) required to become one.
**TL;DR:** DevOps combines development and operations to automate software delivery. To become a DevOps engineer, you should adopt a mindset of automation, risk awareness, systems thinking, and continuous learning. In addition to the mindset, follow the steps below:
- Step 1: Learn a programming language
- Step 2: Get comfortable with Linux and terminal
- Step 3: Version control and code hosting platforms
- Step 4: Networking fundamentals
- Step 5: Containerization
- Step 6: Cloud platform
- Step 7: Continuous integration and delivery
Lets dive into the essential skills required for a [DevOps engineer](https://roadmap.sh/devops).
## Skills required to become a DevOps Engineer
### Operating system
A DevOps engineer should understand the operating system, especially Linux (distribution or any variant). This is because most of the servers in use are Linux-based, so having a solid foundation in the Linux OS is imperative for infrastructure management and troubleshooting.
### Solid programming fundamentals
As a DevOps engineer, you will use your knowledge of programming and scripting language to:
- Automate frequent and boring tasks
- Patch a security bug exposing your internal application to outside users
- Create automation tools, monitoring tools, and logging tools
Hence, hands-on experience with programming is crucial.
### Version control
Knowledge of version control is essential in all software engineering roles. As a DevOps engineer, you will likely work in a team rather than alone. Version control systems like Git facilitate collaboration in a team while providing a centralized repository for the code.
### Networking fundamentals
Many modern-day applications are distributed systems that rely on networking. For instance, a single application could be composed of a frontend, backend, database, file server, etc., each residing on a separate server. For a seamless user experience, these separate entities should be able to communicate smoothly.
### Containerization and orchestration
[Containerization](https://roadmap.sh/docker) and [orchestration](https://roadmap.sh/kubernetes) help solve the issues of software deployment and resource utilization. Knowledge of containerization and orchestration helps reduce deployment time and allows you to scale applications quickly without downtime, resulting in a better user experience.
### Cloud platforms
Procuring hardware to deploy the software is not always feasible and beneficial. Furthermore, once you purchase the hardware, you need more time and resources to manage the new hardware. Depending upon the complexity of the application, choosing cloud platforms instead of on-premise hardware can significantly reduce deployment time and cost.
### Infrastructure as Code (IaC)
IaC can be seen as a superior form of automation for a DevOps engineer. IaC tools like Terraform and Amazon Cloud CDK allow the operations team to set up and manage infrastructure by simply changing a configuration file. This makes it easier to manage and scale the application.
So, how do you learn these essential skills? In what sequence do you acquire these skills? The following section presents a complete roadmap on how you can learn these skills and become a DevOps engineer.
## How to become a DevOps Engineer
The internet is full of resources for learning DevOps and DevOps tools. Many of these guides lack structure and organization, resulting in a dilemma of where to start. To help beginners learn DevOps in a structured manner, [roadmap.sh](https://roadmap.sh) has a beginner-friendly [DevOps roadmap](https://roadmap.sh/devops?r=devops-beginner).
This section presents a concise version of the DevOps roadmap. It is recommended that you implement real-world projects recommended in each stage of the roadmap. In the end, you can publish these DevOps projects to GitHub as an open-source project repository, and the repository will act as your portfolio.
### Step 1: Learn a programming language
Programming language is essential to a DevOps engineer. I recommend you start with either Python or Go. [Python](https://roadmap.sh/python) is a popular programming language that is easier to learn and used in various projects involving [backend](https://roadmap.sh/backend) development, writing machine learning algorithms, automating everyday tasks, etc.
[Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) is an excellent resource for learning Python and basic programming concepts. It will also come in handy when building automation tools. To demonstrate your understanding of Python, you can create a web scraper that extracts a list of hotels, their address, prices, reviews, and locations from a site like [booking.com](http://booking.com/).
### Step 2: Get comfortable with Linux and the terminal
According to [Gitnux](https://gitnux.org/linux-statistics/), 92.4% of the worlds top 1 million servers run on Linux, and about 96.3% of the worlds top 1 million websites are powered by Unix-like operating systems, with Linux being the most popular. This makes Linux a popular tool for all software engineers.
Furthermore, you should make the terminal your best friend. Some programs and packages may not have a GUI counterpart, and even when they exist, using the CLI(Command Line Interface) alternative is faster and easier to automate.
An excellent way to practice Linux is to install it on a thumb drive and try to do everyday tasks like changing the directory, creating new files and folders, editing files, searching for files and folders, etc., using Linux commands instead of using the GUI interface.
### Step 3: Version control and code hosting platforms
Version control systems like Git make it easier for developers to track changes in their source code by maintaining a history of the changes. Combined with platforms like GitHub or Bitbucket, Git can facilitate developers to work collaboratively with each other.
[This tutorial](https://www.atlassian.com/git) will help you learn Git basics and how to use Git for collaboration using Bitbucket, a code hosting platform. For advanced concepts on git branching, [refer this site.](https://learngitbranching.js.org) Once you go through the tutorial, you can easily switch from Bitbucket to GitHub and GitLab, which are more popular among developers.
### Step 4: Networking fundamentals
Learning networking fundamentals becomes vital to the DevOps team when working with software components constantly communicating with other services. Knowledge of networks comes in handy when setting up resources in the public cloud. At a minimum, you should clearly understand standard protocols(TCP/IP, UDP), routing, IP addressing, subnetting, and ports.
A DevOps engineer should have a sound knowledge of web servers like Nginx. Nginx allows you to serve your application on the web while handling reverse proxy and load balancing. [Apache](https://httpd.apache.org) is another web server that provides similar features.
For your practice, you can create a simple frontend (or clone it from GitHub) and deploy it using Nginx or Apache.
### Step 5: Containerization
An application developed by one developer may not work on other machines due to the difference in environment. To eliminate this issue, DevOps engineers use containerization tools like Docker. Docker allows engineers to create consistent development, testing, and production environments. It also ensures the developed application is portable across different platforms.
Applications rely on multiple containers that communicate with each other. To facilitate the orchestration of these containers, you can use container orchestration tools like [Kubernetes](https://roadmap.sh/kubernetes). The [Docker Roadmap](https://roadmap.sh/docker) provides essential resources to help you master Docker and Kubernetes.
You can demonstrate your understanding of containerization tools by creating a simple project with frontend and back deployed as two separate containers. If you have already developed these components in the previous stages of the roadmap, re-use them to save time.
### Step 6: Cloud platform
Cloud platforms like [AWS](https://roadmap.sh/aws), Azure, and Google Cloud Platform are some popular cloud providers that allow you to deploy your projects without investing in expensive hardware. Many cloud services across these cloud platforms are analogous. So, if you are a beginner, start with AWS, as it is the most widely used cloud platform. Once you are comfortable with AWSs services and key concepts, you can deploy the application created in earlier stages to the AWS.
Alternatively, you could demonstrate your understanding by taking the [certification exam from AWS](https://aws.amazon.com/certification/).
Once comfortable launching your infrastructure using the GUI, you should learn about Infrastructure as Code(IaC). I recommend using [Terraform](https://www.terraform.io/) for IaC as it is cloud-agnostic. Terraform allows you to set up and make changes to infrastructure resources by editing a configuration file.
### Step 7: Continuous integration and delivery
[Continuous Integration and Continuous Delivery](https://www.youtube.com/watch?v=nyKZTKQS_EQ) (or Continuous Deployment) (CI/CD) is a set of practices aimed at automating and streamlining software changes from development to production. Today, in practice, when you commit and push your changes to the remote repository (say GitHub), the tests kick off; if the tests pass successfully, your changes are merged and then deployed to the staging and production server.
CI/CD is a combination of three skills: programming, writing configuration files, and Git. As such, you dont need to learn new skills to implement CI/CD. However, some organizations use tools like CircleCI and Jenkins to simplify the process.
You can practice CI/CD using GitHub actions. [GitHub provides a set of tutorials](https://docs.github.com/en/actions/learn-github-actions) for the same. You can follow along those tutorials to get a good grasp of Continuous Integration and Continuous Deployment. Then, you can implement CICD in one of your projects created while learning previous skills in this roadmap.
Next, lets discuss the mindset needed to become a DevOps engineer.
## DevOps Engineers mindset
To become a successful DevOps engineer, you must orient your thoughts around the following:
### Automation
Software products or systems are prone to various errors, including human errors. Stress during work and the race against deadlines can increase the frequency of these errors. Automation helps reduce human error and eliminate boring tasks.
### Risk awareness
DevOps engineers must understand the risks entangled with changes to a software system and deployment infrastructures. The risk should be minimized by utilizing automated testing, monitoring, and incremental changes.
### Systems thinking
DevOps engineers must understand how different components within a system communicate and interact with each other to deliver the desired solution. A graphical representation of the system can come in handy when fixing issues or knowledge transfer.
### Continuous learning
A continuous learning and continuous improvement mindset is essential across all roles in software engineering, but its importance is amplified for a DevOps engineer. A DevOps engineer must continually learn about new technologies, tools, and best practices and implement the ones best suited to the project.
You may not have the DevOps mindset, but that is okay. You can build this mindset as you learn and grow into the role. Let us look at some technical skills required to become a DevOps engineer.
## Who can become a DevOps Engineer?
Anyone with the right skillset can become a DevOps engineer. Typically, it is easier to transition into a DevOps role if you are a,
- Systems Engineer
- Backend Engineer
- Infrastructure Engineer
If you are a newbie in software engineering, you are encouraged to learn the above skills and concepts. You can then apply for a DevOps intern position. You may look for vacancies in local companies or remote job boards.
Depending on your current skill set and practical experience, the time to transition into a DevOps role will vary. However, following a structured learning path will help you speed up and ease the process.
## What next?
The [roadmap](https://roadmap.sh) simplifies the [DevOps](https://roadmap.sh/devops) journey by breaking it into learnable skills via the DevOps roadmap. To effectively use the site, I encourage you to [sign up](https://roadmap.sh/signup) on the platform and learn the desired skill by following the structured roadmap. You could explore additional roadmaps and advanced topics utilizing the search bar on the platform. The platform also allows you to:
- Keep track of your journey as you progress through a roadmap
- Draw your own roadmap or generate one using AI
- Create and share a roadmap for [your team](https://roadmap.sh/teams)

View File

@@ -1,13 +1,13 @@
---
title: 'Must-Have Java Full-stack Developer Skills in @currentYear@'
description: 'Master the essential skills every Java full stack developer needs. Boost your career with our expert tips!'
authorId: kamran
authorId: william
excludedBySlug: '/java/developer-skills'
seo:
title: 'Must-Have Java Full-stack Developer Skills in @currentYear@'
description: 'Master the essential skills every Java full stack developer needs. Boost your career with our expert tips!'
ogImageUrl: 'https://assets.roadmap.sh/guest/java-full-stack-developer-skills-sjzbd.png'
isNew: true
isNew: false
type: 'textual'
date: 2024-05-01
sitemap:

View File

@@ -5,7 +5,7 @@ briefDescription: 'Test, rate and improve your Backend knowledge with these ques
title: '50 Popular Backend Developer Interview Questions and Answers'
description: 'Test, rate and improve your Backend knowledge with these questions.'
authorId: 'fernando'
isNew: true
isNew: false
date: 2024-05-24
seo:
title: '50 Popular Backend Developer Interview Questions and Answers'
@@ -61,7 +61,7 @@ questions:
topics:
- 'Beginner'
- question: What is containerization, and how does it benefit backend development?
answer: statelessness-http.md
answer: containerization.md
topics:
- 'Beginner'
- question: What measures would you take to secure a newly developed API?
@@ -141,7 +141,7 @@ questions:
topics:
- 'Intermediate'
- question: Describe the concept of eventual consistency and its implications in backend systems
answer: api-dependencies.md
answer: eventual-consistency.md
topics:
- 'Intermediate'
- question: What is a reverse proxy, and how is it useful in backend development?

View File

@@ -0,0 +1,6 @@
There are 4 main ways in which JavaScript allows developers to handle asynchronous calls. In the end, the result is always the same, but the final structure of the code and the way to reason about it is considerably different.
- **Callbacks**. They allow you to set up a function to be called directly once the asynchronous operation is done.
- **Promises**. Promises represent the eventual completion of an asynchronous operation, and they provide a simpler and more intuitive syntax to specify callbacks to be called on success and failure of the operation.
- **Async/Await**. The final evolution of the promises syntax. Its mainly syntactic sugar, but it makes asynchronous code look synchronous, which in turn makes it a lot easier to read and reason about.
- **Event listeners**. Event listeners are callbacks that get triggered when specific events are fired (usually due to user interactions).

View File

@@ -0,0 +1,5 @@
In CSS, the difference between **inline**, **inline-block**, and **block** elements is on the way theyre rendered in the web page:
- **Inline**: Inline elements dont have a width or height. Instead, they dont start on a new line and take up only the width thats required (based on their content). Examples: &lt;span&gt;, &lt;a&gt;.
- **Inline-block**: Just like inline elements, here the DOM elements do not start on a new line, however, they do allow you to set a height and width on them. Example: &lt;img&gt;.
- **Block**: Elements start on a new line, taking up the full width available by default. Their width and height can be set by you. Examples: &lt;div&gt;, &lt;p&gt;.

View File

@@ -0,0 +1,8 @@
The CSS box model describes the rectangular boxes generated for elements in the DOM. The box model is composed of the following layers:
1. **Content**: The innermost part, where text and images appear.
2. **Padding**: The space between the content and the border.
3. **Border**: The outer edge of the padding, surrounding the element.
4. **Margin:** The space outside the border, separating the element from others.
By controlling each layer individually, you can define the look of each element in the user interface.

View File

@@ -0,0 +1,9 @@
The process of rendering a web page in the browser involves several steps:
1. Parsing the HTML.
2. Parsing the CSS and applying styles.
3. Calculating the position of each element in the layout of the page.
4. Painting the actual pixels in the screen, while at the same time sorting them into layers.
5. Composing all layers together, to render the website on screen. This step is taking into account z-index values, opacity values and more.
6. Running JavaScript code.
7. Loading the asynchronous resources.

View File

@@ -0,0 +1,5 @@
**Cookies** are small pieces of data stored in web browsers. They are mainly used for keeping information between HTTP requests, such as user authentication, session management, and tracking user behavior
On the other hand, **sessionStorage** is designed for temporary storage and is accessible only within the same session (i.e.., while the browser window or tab is open). Data stored in sessionStorage is lost when the browser window is closed.
Finally, **localStorage** is similar to **sessionStorage** but persists even when the browser window or tab is closed and reopened. It provides long-term storage for web applications. They are very similar to cookies, however, the size limitations on localStorage are quite big compared to cookies, making it a much better alternative when storing large datasets.

View File

@@ -0,0 +1,3 @@
When a function is defined within another function, it retains access to the variables and parameters of the outer function, even after the outer function has finished executing. That link, between the inner function and its scope inside the outer function is known as “closure”
You can use them to create private variables that can only be accessed by the inner function, you can even use them to create complex objects with access to a rich context that is only available globally to them.

View File

@@ -0,0 +1,3 @@
Remove the CSS rules from the CSS files and inline them into the main “&lt;head&gt;” element of your website.
By doing it like this, you remove the loading time of that code, as it loads immediately once the main file loads. The rest, the non-critical rules, can be loaded once the main resource loads (the main CSS file).

View File

@@ -0,0 +1,7 @@
Content Security Policy (CSP) is a security standard that helps to avoid cross-site scripting (XSS) attacks and other code injection attacks by defining and enforcing a whitelist of approved sources, such as scripts, stylesheets, images, and other resources.
The main benefits are:
- **Better Security**: CSP helps protect websites and web apps against various types of attacks, including XSS and data injection.
- **More Contro**l: Developers can define fine-grained policies to control the sources from which content can be loaded.
- **Improved Compliance**: Helps meet security compliance requirements, such as those outlined in OWASP Top 10.

View File

@@ -0,0 +1,3 @@
To create a grid layout, you have to first specify the “display:grid” property on the containing element, and then define the structure of the grid, by using the “grid-template-rows” and “grid-template-columns” properties.
Now simply place the elements inside the grid container and specify the “grid-column” or “grid-row” properties.

View File

@@ -0,0 +1,8 @@
CSS specificity is used to determine which set of styles to apply on any given element when there are overlapping styles (like several rules setting the font-size of the same element).
The way it works is by applying the following order of precedence:
1. First, any inline style will override any other style.
2. Second, any ID-based style will override anything but inline styles.
3. Third, class-based selectors will override anything but inline and ID-based styles.
4. Finally, type selectors can be overridden by any other type of selectors.

View File

@@ -0,0 +1,3 @@
Just like variables in programming languages, CSS variables can be set by developers and reused across the entire CSS stylesheets. Theyre great for centralizing global values that are used throughout the web sites code.
Theyre also heavily used by CSS frameworks to set constants such as the value of colors (i.e. “black” being “#222” instead of “000”.-

View File

@@ -0,0 +1 @@
The Document Object Model (DOM) is an API for web documents. It represents the structure of an HTML web page as a tree of nodes, where each node corresponds to a part of the document (i.e. an element, an attribute, or text).

View File

@@ -0,0 +1,6 @@
![EM vs REM in CSS](https://assets.roadmap.sh/guest/em-vs-rem-css-jwgx8.png)
Theyre both relative units of measurement, however, theyre relative to different things:
1. **“em”** units are relative to the font size of their parent element. So if the parent element has a font size of 20px, then setting a “2em” font size, would equal to 40px.
2. **“rem”** units are “root em”, which means theyre relative to the web pages root element (the “&lt;html&gt;” element).

View File

@@ -0,0 +1,5 @@
Event delegation is a technique where you define an event handler for a particular event as part of the parent element that contains the elements that will actually trigger the event.
![Event Delegation in JavaScript](https://assets.roadmap.sh/guest/event-delegation-explained-5e2vt.png)
When the event is triggered, itll bubble up in the DOM hierarchy until it reaches the parents event handler.

View File

@@ -0,0 +1,3 @@
To add an event listener on an element, you have to first “get” that element through one of the many methods of the document object (i.e. getElementById, etc) and then use the addEventListener method of the obtained object.
The method will receive the event name (i.e. click, keyup, mouseup, etc), the event handler function and, optionally, a boolean indicating whether the event should be captured during the capturing phase.

View File

@@ -0,0 +1,10 @@
The event loop is a core concept in JavaScript, and it allows for the execution of asynchronous code.
![Event loop in JavaScript](https://assets.roadmap.sh/guest/javascript-event-loop-explained-d92hx.png)
The way it works, is as follows:
1. **Call Stack**: JavaScript executes your code on a single thread using a call stack, where function calls are added and executed one by one. When a function ends, it's removed from the stack.
2. **Async calls**: For asynchronous operations, JavaScript uses Web APIs provided by the browser. These operations are offloaded from the call stack and handled separately.
3. **Tasks Queue**: Once an asynchronous call is done, its callback is placed in the task queue.
4. **Event Loop**: The event loop constantly checks the call stack and the task queue. If the call stack is empty, it takes the first task from the queue and pushes it onto the call stack for execution. This cycle repeats indefinitely.

View File

@@ -0,0 +1,4 @@
To create a flexbox layout, you have to take care of 2 main steps:
1. Set up the container element by applying the “display:flexbox” CSS property to it.
2. Set up the flexbox properties for each element inside the container (something like “flex:1” would suffice).

View File

@@ -0,0 +1,10 @@
An **id** is a unique identifier for a single HTML element. A **class** is a reusable identifier that can be applied to multiple elements.
![ID vs Class in HTML](https://assets.roadmap.sh/guest/css-classes-vs-id-example-9ufsl.png)
Youd want to use an **id** when you need to address a single element either through CSS or JavaScript. And youll want to use a **class** when you need to address a group of DOM elements.
In CSS:
- **#id** selects a specific element with that id.
- **.class** selects all elements with that class.

View File

@@ -0,0 +1,7 @@
The main set of metrics to monitor for web apps are:
1. First Contentful Paint (FCP): Time until the first piece of content is rendered.
2. Largest Contentful Paint (LCP): Time until the largest content element is rendered.
3. Time to Interactive (TTI): Time until the page is fully interactive.
4. Total Blocking Time (TBT): Total time during which the main thread is blocked.
5. Cumulative Layout Shift (CLS): Measures visual stability.

View File

@@ -0,0 +1 @@
Promises are JavaScript objects that represent the eventual completion of an asynchronous call. Through promises youre able to handle the successful or failed execution of the asynchronous call.

View File

@@ -0,0 +1,3 @@
Media queries are a feature in CSS that allow Front End developers to apply different styles to a document based on various characteristics of the device or viewport. For example, you can set different styles based on the devices width, height, orientation, or type.
Through media queries we can achieve responsive design allowing styles to adapt to different screen sizes and device capabilities.

View File

@@ -0,0 +1,3 @@
In JavaScript, “undefined” is the default value new variables take, and it means the variable has been defined but it hasnt been assigned any value just yet.
And “null” is actually a value that signals “no value” or “no object”, it is specifically assigned to the variable by the developer.

View File

@@ -0,0 +1,4 @@
There are different techniques to improve loading times, depending on the asset type, for example:
- CSS & JavaScript files should be minimized and compressed.
- Images can be compressed when youre saving them or through the use of specialized software, like [JPEGOptim](https://github.com/tjko/jpegoptim) or [ImageOptim](https://imageoptim.com/mac). Just make sure you dont lose any quality during the process.

View File

@@ -0,0 +1,5 @@
The same-origin policy is a security feature in browsers designed to prevent a web site from accessing data (like importing a script, or sending a request to an API) from another site.
This policy helps protect users from malicious scripts that try to steal sensitive data from other websites, such as cookies, local storage, or content
A way to overcome this limitation is through CORS (Cross-Origin Resource Sharing). As long as the server specifies which domain it can receive requests from, and the client app sends the right headers, they will be able to interact with each other, even if theyre not in the same domain.

View File

@@ -0,0 +1,12 @@
Purely from the HTML side:
- **Use Semantic HTML**: Use tags like &lt;header&gt;, &lt;nav&gt;, &lt;main&gt;, &lt;article&gt;, &lt;section&gt;, and &lt;footer&gt; to provide meaningful structure.
- **Proper Heading Hierarchy**: Use headings (&lt;h1&gt; to &lt;h6&gt;) correctly, making sure &lt;h1&gt; is used once per page for the main title, followed by &lt;h2&gt;, &lt;h3&gt;, etc.
- **Meta Tags**: Include relevant &lt;meta&gt; tags, such as description, keywords, and viewport, to provide metadata about the website.
- **Alt Attributes on images**: Use alt attributes for images to describe the content, improving accessibility and search engine understanding.
On top of that:
- **Internal Linking**: Make sure to use internal links to connect content within your web site, helping search engines crawl and understand the site structure.
- **Mobile-Friendly Design**: Code your site and CSS with a mobile-first mindset. Ensuring the site is responsive and mobile-friendly to improve user experience and ranking on search engines.
- **Fast Loading Times**: Try to optimize images, use efficient code, and leverage caching to improve page load speeds. The faster the page loads, the bigger the advantage itll have against other similar results on the SERP.

View File

@@ -0,0 +1 @@
Service workers are scripts that run in the background of a web application, separate from the web pages main thread, and provide features like offline caching, push notifications, and background synchronization.

View File

@@ -0,0 +1,7 @@
Server-side rendering (SSR) is a technique in which a web server generates the HTML content of a web page and sends it to the client (usually a web browser) as a fully rendered document. This is the opposite of what naturally happens with client-side rendering (CSR), where the browser downloads a minimal HTML page and then uses JavaScript to render the content dynamically.
There are several ideal use cases for SSR:
- **Content-rich websites**. For example, news sites, blogs, etc.
- **SEO-heavy applications**. When the success of the web app relies on SEO, this approach can greatly improve the performance of the site (and because of that, the SEO performance).
- **Progressive web applications**. When the application needs to render fast to provide a fast and performance user experience, the application can initially be rendered on the server, and then hydrated on the client for subsequent integrations.

View File

@@ -0,0 +1,8 @@
Without a full framework or library like React or Vue.js, properly handling state management is not a trivial task.
Some options available through the language itself are:
- **Global Variables**: You can use global variables, or perhaps a global object to centralize state. The problem with this approach is that it can become quite unmanageable for large applications. Its also a lot harder to maintain local state inside single components.
- **Module Pattern**: You can use this pattern to encapsulate state and provide a clear API to manage it. You would have to instantiate local instances of these modules for individual components.
- **Pub/Sub Pattern**: This option is more sophisticated, and it decouples state changes using event-driven architecture. Its a more complex solution, but it provides a bigger flexibility.
- **State Management Libraries**: You can always use something like [Redux](https://redux.js.org/) or similar libraries without frameworks.

View File

@@ -0,0 +1,7 @@
Tree shaking is a technique used in JavaScript module bundlers, like Webpack or Vite, to remove unused code from the final bundled output.
Main benefits include:
1. **Reduced Bundle Size:** Removing unused code reduces the size of the JavaScript bundle sent to the client, improving load times and reducing bandwidth usage.
2. **Improved Performance:** Smaller bundle sizes can lead to faster parsing and execution times, resulting in improved performance and responsiveness of the web application.
3. **Better Resource Utilization:** Developers can write modular code without worrying about unused dependencies bloating the final bundle size.

View File

@@ -0,0 +1,14 @@
![Virtual DOM](https://assets.roadmap.sh/guest/virtual-dom-example-7ynkg.png)
The way the virtual DOM works is the following:
1. The entire user interface is copied into an in-memory structure called “virtual DOM”, which is a lightweight version of the actual DOM.
2. When state changes and the UI needs to be updated, a new virtual DOM is created with the updated state.
3. Then a diff is made between the new virtual DOM and the previous version.
4. The system will then calculate the least amount of changes required to achieve the new state, and itll apply those changes. Only the nodes that need to be updated are touched, which minimizes direct manipulation of the real DOM.
As for advantages:
- **Performance optimization**: By only updating specific nodes within the real DOM, this technique reduces the number of updates, reflows and repaints on the UI. Directly affecting the performance of the app.
- **Cross-platform**. The virtual DOM provides a layer of abstraction between the application and the actual API that renders the UI. This means the app can be ported into other platforms as long as there is a virtual DOM implementation for that platform.
- **Consistency**. This technique keeps the UI in sync with the internal state, reducing bugs and inconsistencies.

View File

@@ -0,0 +1,164 @@
---
order: 5
briefTitle: 'Frontend'
briefDescription: 'Test, rate and improve your Frontend knowledge with these questions.'
title: 'Top 30 Popular Front End Developer Interview Questions'
description: 'Test, rate and improve your Frontend knowledge with these questions.'
authorId: 'fernando'
isNew: false
date: 2024-05-24
seo:
title: 'Top 30 Popular Front End Developer Interview Questions'
description: 'Nail your frontend developer interview with these 30 popularly asked questions and answers. Test your knowledge with our quiz cards!'
keywords:
- 'frontend quiz'
- 'frontend questions'
- 'frontend interview questions'
- 'frontend interview'
- 'frontend test'
sitemap:
priority: 1
changefreq: 'monthly'
questions:
- question: What is the difference between an id and a class in HTML/CSS?
answer: id-vs-class.md
topics:
- 'Beginner'
- question: Can you explain the box model in CSS?
answer: box-model.md
topics:
- 'Beginner'
- question: What is the difference between inline, inline-block, and block elements?
answer: block-inline-elems.md
topics:
- 'Beginner'
- question: What are some SEO best practices when structuring an HTML document?
answer: seo-best-practices.md
topics:
- 'Beginner'
- question: What is the Document Object Model (DOM)?
answer: dom.md
topics:
- 'Beginner'
- question: How do you add an event listener to an element?
answer: event-listeners.md
topics:
- 'Beginner'
- question: What is the difference between null and undefined?
answer: null-vs-undefined.md
topics:
- 'Beginner'
- question: What is the difference between cookies, sessionStorage, and localStorage?
answer: client-storage.md
topics:
- 'Beginner'
- question: How does the browser render a website?
answer: browser-render.md
topics:
- 'Beginner'
- question: What are media queries?
answer: media-queries.md
topics:
- 'Beginner'
- question: What is the difference between the em and rem units?
answer: em-vs-rem.md
topics:
- 'Intermediate'
- question: How do you create a flexbox layout?
answer: flexbox-layout.md
topics:
- 'Intermediate'
- question: Can you explain CSS specificity and how it works?
answer: css-specificity.md
topics:
- 'Intermediate'
- question: How can you create a CSS grid layout?
answer: css-grid.md
topics:
- 'Intermediate'
- question: What are closures, and how/why would you use them?
answer: closures.md
topics:
- 'Intermediate'
- question: Can you explain what event delegation is in JavaScript?
answer: event-delegation.md
topics:
- 'Intermediate'
- question: What are promises, and how do they work?
answer: js-promises.md
topics:
- 'Intermediate'
- question: How do you optimize website assets for better loading times?
answer: optimize-assets.md
topics:
- 'Intermediate'
- question: What are service workers, and what are they used for?
answer: service-workers.md
topics:
- 'Intermediate'
- question: What is the Same-Origin Policy in web development?
answer: same-origin-policy.md
topics:
- 'Intermediate'
- question: What are CSS variables, and when would you use them?
answer: css-variables.md
topics:
- 'Advanced'
- question: How would you implement critical CSS to improve the perceived load time of your web pages?
answer: critical-css.md
topics:
- 'Advanced'
- question: How does the event loop work in JavaScript?
answer: event-loop-js.md
topics:
- 'Advanced'
- question: What are the different ways to handle asynchronous operations in JavaScript?
answer: async-ops-js.md
topics:
- 'Advanced'
- question: How do you handle state management in single-page applications?
answer: state-mgmt-spa.md
topics:
- 'Advanced'
- question: How does virtual DOM work, and what are its advantages?
answer: vdom.md
topics:
- 'Advanced'
- question: What is server-side rendering, and when might you use it?
answer: ssr-when.md
topics:
- 'Advanced'
- question: How do you analyze and improve the performance of a web application?
answer: improve-web-perf.md
topics:
- 'Advanced'
- question: What is Content Security Policy (CSP), and how does it improve the security of web applications?
answer: csp.md
topics:
- 'Advanced'
- question: What is tree shaking, and how does it help with the performance of a web application?
answer: tree-shaking.md
topics:
- 'Advanced'
---
Preparing for your front end web development interview is key to achieving a successful outcome, but understanding what kind of questions or topics are going to be asked is not easy.
So to help you get ready for your upcoming front end developer interview, here are 30 technical interview questions about web development with a focus on the front end, in other words, about JavaScript, HTML, and CSS.
Keep in mind that theyre grouped by difficulty into three categories: beginners, intermediate and advanced. Ideally, you should aim to understand all of them, and if you find yourself not able to continue, consider checking out the [Frontend roadmap](https://roadmap.sh/frontend) to figure out what to focus your studies on.
## Preparing for your Front End interview
Before jumping straight into front end interview prep, here are some key points to keep in mind:
1. **Master the Fundamentals**: Before you start to solve complex problems, you need to make sure you have a solid understanding of front end development basics. This includes HTML, CSS, and JavaScript, as well as how they work together to create responsive, interactive web pages. Remember that you have the [Front End roadmap](https://roadmap.sh/frontend) available if you feel you still need to learn more about any of these topics.
2. **Practice Coding**: You can improve your coding skills through mini-projects or by solving problems on platforms like [LeetCode](https://leetcode.com/) and [HackerRank](https://www.hackerrank.com/). Focus on challenges related to front end development.
3. **Learn Modern Frameworks and Libraries**: Get to know popular frameworks and libraries such as React, Angular, or Vue.js. Understanding these tools is often crucial for modern front end roles.
4. **Tackle the foundational tools of your dev workflow**: Make sure youre comfortable with essential tools and practices such as version control (e.g., Git), testing (unit and integration testing), and build tools (e.g., Vite). These are crucial for any front end role.
5. **Understand UI/UX Principles**: Understanding basic concepts of design and user experience can set you apart as a front end developer. Try to learn about accessibility, responsive design, and how to create intuitive interfaces.
6. **Research the Company**: Show some interest in the company youre interviewing with by learning about their business and products. Prepare some questions to ask during the interview to show you care about the role.
7. **Improve your communication skills**. This one is not front end-specific, however, its always a good idea to invest in your future.
With these tips out of the way, let's now get into some of the most common Front End interview questions that youll encounter!

View File

@@ -35,7 +35,7 @@ questions:
- 'Beginner'
- question: What is the difference between Real DOM and Virtual DOM?
answer: |
Virtual DOM is the representation of a UI in the form of a plain javascript object. It is a node tree that lists the elements, their attributes and content as Objects and their properties. Real DOM is the real representation of a UI which can be seen and inspected in the browser.
Virtual DOM is the representation of a UI in the form of a plain JavaScript object. It is a node tree that lists the elements, their attributes and content as Objects and their properties. Real DOM is the real representation of a UI which can be seen and inspected in the browser.
Manipulating the virtual DOM is much faster than real DOM, because nothing gets drawn on the screen. React uses this virtual DOM to figure out the most efficient way to update the browser DOM.
topics:
- 'Core'
@@ -80,7 +80,7 @@ questions:
- question: What are refs in React?
answer: |
Refs are used to get reference to a DOM node or an instance of a component. They help to access the DOM nodes or React elements created in the render method.
You can also use refs When you want a component to “remember” some information, but you dont want that information to trigger new renders, you can use a ref.
You can also use refs when you want a component to “remember” some information, but you dont want that information to trigger new renders, you can use a ref.
topics:
- 'Core'
- 'Intermediate'
@@ -98,7 +98,7 @@ questions:
- 'Advanced'
- question: What is the difference between react and react-dom packages?
answer: |
React is a library for building user interfaces. The package `react` contains only the renderer-agnostic code i.e. the core React library, algorithm for computing changes in the UI and other helpers. . The package `react-dom` contains the code specific to the DOM rendering of React components.
React is a library for building user interfaces. The package `react` contains only the renderer-agnostic code i.e. the core React library, algorithm for computing changes in the UI and other helpers. The package `react-dom` contains the code specific to the DOM rendering of React components.
topics:
- 'Core'
- 'Beginner'
@@ -224,7 +224,7 @@ questions:
topics:
- 'UX'
- 'Intermediate'
- question: How React Virtual DOM works?
- question: How does React Virtual DOM work?
answer: virtual-dom.md
topics:
- 'Core'

View File

@@ -1,4 +1,5 @@
# AB Testing
- [Practitioners Guide to Statistical Tests](https://vkteam.medium.com/practitioners-guide-to-statistical-tests-ed2d580ef04f#1e3b)
- [Step by Step Process for Planning an A/B Test](https://towardsdatascience.com/step-by-step-for-planning-an-a-b-test-ef3c93143c0b)
- [@article@Practitioners Guide to Statistical Tests](https://vkteam.medium.com/practitioners-guide-to-statistical-tests-ed2d580ef04f#1e3b)
- [@article@Step by Step Process for Planning an A/B Test](https://towardsdatascience.com/step-by-step-for-planning-an-a-b-test-ef3c93143c0b)
- [@feed@Explore top posts about A/B Testing](https://app.daily.dev/tags/ab-testing?ref=roadmapsh)

View File

@@ -1,7 +1,7 @@
# Classic/Advanced ML
- [Open Machine Learning Course](https://mlcourse.ai/book/topic01/topic01_intro.html)
- [Coursera: Machine Learning Specialization](https://imp.i384100.net/oqGkrg)
- [Pattern Recognition and Machine Learning by Christopher Bishop](https://www.microsoft.com/en-us/research/uploads/prod/2006/01/Bishop-Pattern-Recognition-and-Machine-Learning-2006.pdf)
- [Repository of notes, code and notebooks in Python for the book Pattern Recognition and Machine Learning by Christopher Bishop](https://github.com/gerdm/prml)
- [@article@Open Machine Learning Course](https://mlcourse.ai/book/topic01/topic01_intro.html)
- [@article@Coursera: Machine Learning Specialization](https://imp.i384100.net/oqGkrg)
- [@article@Pattern Recognition and Machine Learning by Christopher Bishop](https://www.microsoft.com/en-us/research/uploads/prod/2006/01/Bishop-Pattern-Recognition-and-Machine-Learning-2006.pdf)
- [@opensource@Repository of notes, code and notebooks in Python for the book Pattern Recognition and Machine Learning by Christopher Bishop](https://github.com/gerdm/prml)
- [@feed@Explore top posts about Machine Learning](https://app.daily.dev/tags/machine-learning?ref=roadmapsh)

View File

@@ -1,6 +1,6 @@
# Data Understanding, Analysis and Visualization
- [Exploratory Data Analysis With Python and Pandas](https://imp.i384100.net/AWAv4R)
- [Exploratory Data Analysis for Machine Learning](https://imp.i384100.net/GmQMLE)
- [Exploratory Data Analysis with Seaborn](https://imp.i384100.net/ZQmMgR)
- [@article@Exploratory Data Analysis With Python and Pandas](https://imp.i384100.net/AWAv4R)
- [@article@Exploratory Data Analysis for Machine Learning](https://imp.i384100.net/GmQMLE)
- [@article@Exploratory Data Analysis with Seaborn](https://imp.i384100.net/ZQmMgR)

View File

@@ -1,5 +1,5 @@
# MLOps
- [Machine Learning Engineering for Production (MLOps) Specialization](https://imp.i384100.net/nLA5mx)
- [Full Stack Deep Learning](https://fullstackdeeplearning.com/course/2022/)
- [@article@Machine Learning Engineering for Production (MLOps) Specialization](https://imp.i384100.net/nLA5mx)
- [@article@Full Stack Deep Learning](https://fullstackdeeplearning.com/course/2022/)
- [@feed@Explore top posts about CI/CD](https://app.daily.dev/tags/cicd?ref=roadmapsh)

View File

@@ -1,4 +1,4 @@
# Differential Calculus
- [Algebra and Differential Calculus for Data Science](https://imp.i384100.net/LX5M7M)
- [@article@Algebra and Differential Calculus for Data Science](https://imp.i384100.net/LX5M7M)

View File

@@ -1,4 +1,4 @@
# Econometrics Pre-requisites
- [10 Fundamental Theorems for Econometrics](https://bookdown.org/ts_robinson1994/10EconometricTheorems/)
- [@article@10 Fundamental Theorems for Econometrics](https://bookdown.org/ts_robinson1994/10EconometricTheorems/)

View File

@@ -1,7 +1,7 @@
# Fully Connected NN, CNN, RNN, LSTM, Transformers, Transfer Learning
- [The Illustrated Transformer](https://jalammar.github.io/illustrated-transformer/)
- [Attention is All you Need](https://arxiv.org/pdf/1706.03762.pdf)
- [Deep Learning Book](https://www.deeplearningbook.org/)
- [Deep Learning Specialization](https://imp.i384100.net/Wq9MV3)
- [@article@The Illustrated Transformer](https://jalammar.github.io/illustrated-transformer/)
- [@article@Attention is All you Need](https://arxiv.org/pdf/1706.03762.pdf)
- [@article@Deep Learning Book](https://www.deeplearningbook.org/)
- [@article@Deep Learning Specialization](https://imp.i384100.net/Wq9MV3)

View File

@@ -1,4 +1,4 @@
# Hypothesis Testing
- [Introduction to Statistical Analysis: Hypothesis Testing](https://imp.i384100.net/vN0JAA)
- [@article@Introduction to Statistical Analysis: Hypothesis Testing](https://imp.i384100.net/vN0JAA)
- [@feed@Explore top posts about Testing](https://app.daily.dev/tags/testing?ref=roadmapsh)

View File

@@ -1,9 +1,9 @@
# Increasing Test Sensitivity
- [Minimum Detectable Effect (MDE)](https://splitmetrics.com/resources/minimum-detectable-effect-mde/)
- [Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix](https://kdd.org/kdd2016/papers/files/adp0945-xieA.pdf)
- [Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data](https://exp-platform.com/Documents/2013-02-CUPED-ImprovingSensitivityOfControlledExperiments.pdf)
- [How Booking.com increases the power of online experiments with CUPED](https://booking.ai/how-booking-com-increases-the-power-of-online-experiments-with-cuped-995d186fff1d)
- [Improving Experimental Power through Control Using Predictions as Covariate — CUPAC](https://doordash.engineering/2020/06/08/improving-experimental-power-through-control-using-predictions-as-covariate-cupac/)
- [Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix](https://www.researchgate.net/publication/305997925_Improving_the_Sensitivity_of_Online_Controlled_Experiments_Case_Studies_at_Netflix)
- [@article@Minimum Detectable Effect (MDE)](https://splitmetrics.com/resources/minimum-detectable-effect-mde/)
- [@article@Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix](https://kdd.org/kdd2016/papers/files/adp0945-xieA.pdf)
- [@article@Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data](https://exp-platform.com/Documents/2013-02-CUPED-ImprovingSensitivityOfControlledExperiments.pdf)
- [@article@How Booking.com increases the power of online experiments with CUPED](https://booking.ai/how-booking-com-increases-the-power-of-online-experiments-with-cuped-995d186fff1d)
- [@article@Improving Experimental Power through Control Using Predictions as Covariate — CUPAC](https://doordash.engineering/2020/06/08/improving-experimental-power-through-control-using-predictions-as-covariate-cupac/)
- [@article@Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix](https://www.researchgate.net/publication/305997925_Improving_the_Sensitivity_of_Online_Controlled_Experiments_Case_Studies_at_Netflix)

View File

@@ -1,5 +1,5 @@
# Data Structures and Algorithms
- [Learn Algorithms](https://leetcode.com/explore/learn/)
- [Leetcode - Study Plans](https://leetcode.com/studyplan/)
- [Algorithms Specialization](https://imp.i384100.net/5gqv4n)
- [@article@Learn Algorithms](https://leetcode.com/explore/learn/)
- [@article@Leetcode - Study Plans](https://leetcode.com/studyplan/)
- [@article@Algorithms Specialization](https://imp.i384100.net/5gqv4n)

View File

@@ -1,5 +1,5 @@
# Python
- [Kaggle — Python](https://www.kaggle.com/learn/python)
- [Google's Python Class](https://developers.google.com/edu/python)
- [@article@Kaggle — Python](https://www.kaggle.com/learn/python)
- [@article@Google's Python Class](https://developers.google.com/edu/python)
- [@feed@Explore top posts about Python](https://app.daily.dev/tags/python?ref=roadmapsh)

View File

@@ -1,4 +1,4 @@
# SQL
- [SQL Tutorial](https://www.sqltutorial.org/)
- [@article@SQL Tutorial](https://www.sqltutorial.org/)
- [@feed@Explore top posts about SQL](https://app.daily.dev/tags/sql?ref=roadmapsh)

View File

@@ -1,4 +1,5 @@
# Learn Algebra, Calculus, Mathematical Analysis
- [Mathematics for Machine Learning Specialization](https://imp.i384100.net/baqMYv)
- [Linear Algebra Youtube Course](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)
- [@article@Mathematics for Machine Learning Specialization](https://imp.i384100.net/baqMYv)
- [@video@Linear Algebra Youtube Course](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)
- [@feed@Explore top posts about Math](https://app.daily.dev/tags/math?ref=roadmapsh)

View File

@@ -1,4 +1,4 @@
# Probability and Sampling
- [Probability and Statistics: To p or not to p?](https://imp.i384100.net/daDM6Q)
- [@article@Probability and Statistics: To p or not to p?](https://imp.i384100.net/daDM6Q)
- [@feed@Explore top posts about Statistics](https://app.daily.dev/tags/statistics?ref=roadmapsh)

View File

@@ -1,5 +1,5 @@
# Ratio Metrics
- [Applying the Delta Method in Metric Analytics: A Practical Guide with Novel Ideas](https://arxiv.org/pdf/1803.06336.pdf)
- [Approximations for Mean and Variance of a Ratio](https://www.stat.cmu.edu/~hseltman/files/ratio.pdf)
- [@article@Applying the Delta Method in Metric Analytics: A Practical Guide with Novel Ideas](https://arxiv.org/pdf/1803.06336.pdf)
- [@article@Approximations for Mean and Variance of a Ratio](https://www.stat.cmu.edu/~hseltman/files/ratio.pdf)

View File

@@ -1,12 +1,12 @@
# Regressions, Time series, Fitting Distributions
- [10 Fundamental Theorems for Econometrics](https://bookdown.org/ts_robinson1994/10EconometricTheorems/)
- [Dougherty Intro to Econometrics 4th edition](https://www.academia.edu/33062577/Dougherty_Intro_to_Econometrics_4th_ed_small)
- [Econometrics: Methods and Applications](https://imp.i384100.net/k0krYL)
- [Kaggle - Learn Time Series](https://www.kaggle.com/learn/time-series)
- [Time series Basics : Exploring traditional TS](https://www.kaggle.com/code/jagangupta/time-series-basics-exploring-traditional-ts#Hierarchical-time-series)
- [How to Create an ARIMA Model for Time Series Forecasting in Python](https://machinelearningmastery.com/arima-for-time-series-forecasting-with-python)
- [11 Classical Time Series Forecasting Methods in Python](https://machinelearningmastery.com/time-series-forecasting-methods-in-python-cheat-sheet/)
- [Blockchain.com Data Scientist TakeHome Test](https://github.com/stalkermustang/bcdc_ds_takehome)
- [Linear Regression for Business Statistics](https://imp.i384100.net/9g97Ke)
- [@article@10 Fundamental Theorems for Econometrics](https://bookdown.org/ts_robinson1994/10EconometricTheorems/)
- [@article@Dougherty Intro to Econometrics 4th edition](https://www.academia.edu/33062577/Dougherty_Intro_to_Econometrics_4th_ed_small)
- [@article@Econometrics: Methods and Applications](https://imp.i384100.net/k0krYL)
- [@article@Kaggle - Learn Time Series](https://www.kaggle.com/learn/time-series)
- [@article@Time series Basics : Exploring traditional TS](https://www.kaggle.com/code/jagangupta/time-series-basics-exploring-traditional-ts#Hierarchical-time-series)
- [@article@How to Create an ARIMA Model for Time Series Forecasting in Python](https://machinelearningmastery.com/arima-for-time-series-forecasting-with-python)
- [@article@11 Classical Time Series Forecasting Methods in Python](https://machinelearningmastery.com/time-series-forecasting-methods-in-python-cheat-sheet/)
- [@opensource@Blockchain.com Data Scientist TakeHome Test](https://github.com/stalkermustang/bcdc_ds_takehome)
- [@article@Linear Regression for Business Statistics](https://imp.i384100.net/9g97Ke)

View File

@@ -1,4 +1,4 @@
# Statistics, CLT
- [Introduction to Statistics](https://imp.i384100.net/3eRv4v)
- [@article@Introduction to Statistics](https://imp.i384100.net/3eRv4v)

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
---
pdfUrl: '/pdfs/roadmaps/android.pdf'
renderer: 'editor'
order: 5
briefTitle: 'Android'
briefDescription: 'Step by step guide to becoming an Android Developer in 2024'
@@ -9,7 +10,7 @@ hasTopics: true
isNew: false
dimensions:
width: 968
height: 2197.76
height: 2070
schema:
headline: 'Android Developer Roadmap'
description: 'Learn how to become a Android Developer with this interactive step by step guide in 2024. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'

View File

@@ -1,3 +0,0 @@
# TextView
`TextView` in Android is a UI (User Interface) element that allows you to display text to the user. You can set the text to be displayed by declaring it in XML or introducing it programmatically. This element supports various attributes such as `android:textAllCaps`, `android:textAppearance`, `android:textColor`, etc., to customize its appearance. Each `TextView` corresponds to an `android.widget.TextView` object. You can also react to user interaction events such as touch or click with the help of listeners (like `View.onClickListener` or `View.onTouchListener`). Manipulating with `TextView` is common when creating Android apps as they form the basic building block for user interface components.

View File

@@ -1,3 +0,0 @@
# EditText
`EditText` is a common element used in Android development. It's a fundamental component for accepting user input in simple form or dialog. It allows users to modify text within its bounding box, much like what a TextField does in more general programming languages. If you have used a form or a webpage that allows you to input text, it was probably created with an EditText or similar control. You can customize an `EditText` in various ways including size, color, initial text, and hint text. You can also listen for changes in the text in an EditText, apply filters, specify input types, and more. The `android:text` attribute lets you pre-fill the EditText with text, and `android:hint` provides hint text when the EditText is empty.

View File

@@ -1,3 +0,0 @@
# Buttons
Buttons in Android are user interactions that trigger certain programmable actions. They are part of the `View` class in Android, making them an essential part of user interfaces. Android provides different types of buttons such as `Button`, `ToggleButton`, `RadioButton`, `CheckBox`, `Switch`, `ImageButton`, and `FloatingActionButton`. Each of these serves a different purpose and provides varied interactivity options. Their behavior and appearance can be customized in terms of different properties such as text, ID, color, etc. They can be programmed in the XML layout files or dynamically in the Java/Kotlin code.

View File

@@ -1,3 +0,0 @@
# ImageView
An `ImageView` is a class used in Android for displaying an image file. It inherits from 'View' class and extends the ability of views to show images. Images can be loaded from various sources such as a resource file, drawable, or a URL, with varying scale types. This class also provides methods to manage the image scale type, define padding, set tint, and manipulate the color filter. It's important to note that `ImageView` should be used in moderation as it is resource-intensive and could degrade app performance if used excessively.

View File

@@ -1,3 +0,0 @@
# ListView
`ListView` in Android is a view which groups several items and displays them in vertical scrollable list. The list items are automatically inserted to the list using an `Adapter` that pulls content from a source such as an array or database query and converts each item result into a view that's placed into the list. It is widely used in android apps as it offers an easy way to display a list of data in an organized manner. Functions such as `setAdapter(Adapter)` to specify data source, `setOnItemClickListener(OnItemClickListener)` to listen for click events on items, and `setOnScrollListener(OnScrollListener)` to listen for scroll events, provide further control over the list behavior.

View File

@@ -1,3 +0,0 @@
# Tabs
Tabs are commonly used in Android for switching between different views within the same activity. Some instances may make use of a `TabLayout` located within a `ViewPager` to create swipeable tabs. Each tab is usually associated with a fragment. To create tabs in Android, you need to use the `TabLayout` component that is available in the Material Design library. A typical `TabLayout` contains multiple `TabItem`, each representing a tab in the interface. The `TabLayout` works with a `ViewPager` to provide a consistent swipeable interface. Users can approach tabs differently depending on whether they are coded for manual or automatic filling. Manual tab creation and addition require explicit defining of each tab and adding them to the `TabLayout`, while in automatic filling tabs are generated from the `PagerAdaptor`'s page title.

View File

@@ -1,3 +0,0 @@
# Fragments
In Android, **Fragments** represent a behavior or a part of the user interface in an Activity. They are modular sections of an activity, which are reusable in different activities. They contribute to making an application adaptive to different devices with varied screen sizes. A fragment has its own lifecycle, receives its own input events, and can be added or removed while the activity is running. While they exist within the context of an activity, they can also be used independently to encapsulate functionality for easier development and reuse. Multiple fragments can combine in a single activity to build a multi-pane UI.

View File

@@ -1,5 +0,0 @@
# Dialogs
Dialogs in Android are small windows that prompt users to make a decision or enter additional information. They don't fill the screen and are normally used for modal events that require users to take action before they can proceed. In Android, `Dialog` is actually an abstract class directly subclassed from `Object`. `AlertDialog` is the subclass that you will most commonly use, which contains a number of methods as compared to `Dialog` to support features like lists, checkboxes, radio buttons, and a custom layout design. They are typically used for user interactions such as warnings, notifications, and menus.
To create a dialog, you must use the `Dialog` class or one of its subclasses, such as `DialogFragment` or `AlertDialog`. For a more detailed explanation on implementing dialogs in Android, you can refer to the official Android Developer's Guide.

View File

@@ -1,3 +0,0 @@
# Toast
`Toast` in Android is a simple message that appears on the screen for a short period of time then disappears automatically. It is generally used to provide feedback to the user about an operation in a small popup without requiring any user interaction. This feedback could be an error message or simply information that a process completed successfully. You can configure the toast to appear anywhere on the screen and specify how long it stays up. In order to use a toast, you have to import the `android.widget.Toast` package and instantiate a Toast object. Here's an example of creating a simple toast: `Toast.makeText(context, text, duration).show()`, where context is your application context, text is the message to display, and duration is either `Toast.LENGTH_SHORT` or `Toast.LENGTH_LONG`.

View File

@@ -1,3 +0,0 @@
# Bottom Sheet
The **Bottom Sheet** is a popular UI component within the Android development environment. This interface element acts like a drawer that slides up from the bottom of the screen to reveal more content or options. There are two types of bottom sheets in Android: "persistent" and "modal". The persistent bottom sheet shows in-app content that supplements the primary screen content, remaining visible even when the user interacts with the primary surface. On the other hand, the modal bottom sheet is a simple menu presenting a list of options, often used for sharing content, navigating, or for user-editable content. It can be dismissed by the user and does not remain visible when the user interacts with the primary surface.

Some files were not shown because too many files have changed in this diff Show More