kentcdodds / ama

Ask me anything!
https://github.com/kentcdodds/ama/issues?q=is%3Aissue+is%3Aclosed
685 stars 75 forks source link

Two years to become a web/blockchain developer #335

Closed jamaldewitte closed 6 years ago

jamaldewitte commented 6 years ago

Hi Kent, thank you for doing an ama :) I recently quit my job and am committing myself full-time to web/blockchain development. I was wondering what you think of the below plan? Based on your experience, would you recommend me to change anything? Would you think my goals are realistic? What do you think of the mixture of both computer science foundations and developments? Any input or advice whatsoever is greatly appreciated as this will decide what I will be doing for the next two years and possibly my entire life :)

Introduction and goals Two 2 weeks ago, I quit my job as a tax lawyer in Amsterdam and have saved some money to live (modestly) for the next 2 years. I want to use these two years to completely re-educate myself. During the last half year I have built up a strong interest in blockchain development and web development. My ultimate dream/goal would be to work at a blockchain startup and be a full stack/blockchain developer.

Game plan The game plan is to spend at least 45 hours a week studying for 2 years in order to obtain as much relevant knowledge as possible to work at a blockchain startup as a fullstack/blockchain developer. My prior knowledge is not much. The last 4-6 months during the evenings I have read and practiced some web development but have not yet done any significant projects. I spend a some time on learning vanilla javascript. Concepts such as closures, recursion, "this"-keyword, prototypal inheritance, functional programming, composition, mixins, etc I have read about and practiced a bit with through some very basic JS based applications. Also recently made some very basic todo application in React with Redux so have a (very) basic understanding of that and did some very basic server based stuff in Node JS and Express. I have focused myself mainly on web development and not yet at blockchain (smart-contract) development. Mainly because the documentation/resources for web development are much better currently than in blockchain. Furthermore, I think it would be a big step to start as a blockchain developer considering "Code is law" in the blockchain world. Moreover, as a blockchain is simply stated just a decentralized database, I assume I would also need significant knowledge about web development (i.e. front-end, back-end, tooling, etc.) to apply for such positions. I do not have the ambition (nor the intellectual capacity) to create my own blockchain, but would really like to create a user application that has a blockchain database as back-end as I love the business models and opportunities blockchain is envisioned to create.

I've already done quiet a bit of research about resources to learn from and I have created the below schedule. The schedule can be divided into the following components:

  1. Computer science foundations
  2. Practical web application / blockchain (smart-contract) development
  3. Internship
  4. Keeping a blog

1. Computer science foundations: OSS University (https://github.com/ossu/computer-science) The choice to include OSS University is based on my believe (and please correct me if I'm wrong) that a good software engineer (especially at a startup) needs more than just know to work with certain frameworks, but needs a broader computer science foundation found in a university degree in order to make good architectural decisions about the app. Such to have a broader understanding of e.g. design patterns, algorithms, data structures, how the internet works (networking etc), compilers. I believe OSS University is a solid curriculum to obtain the equivalent of a bachelor degree in computer science. This curriculum should take me the full 2 years to go through, if not more. Studying will take place after month 2 from Monday to Friday for approximately 5 hours per day which equals 25 hours per week.

2. Practical web application / blockchain (smart-contract) development In my view programming is both a science and a craft. Science requires learning, but a craft requires doing. The theoretical background learned in OSS University therefore must be supplemented by actually coding apps in the latest frameworks based on the latest standards. Furthermore, coding during these two years will allow me to build a (modest) portfolio for future hiring purposes. Goal is to spend the first 2 months full-time on this and after approximately 3.5 hours per day from Monday to Friday. In those two years I would like to do the following: Month 1 (i.e. now) Create a simple display latest cryptocurrency prices app in React and Redux with search function (done). Now I want to further expand on this using latest best practices (e.g. styling using Glamorous, make unit tests) and add functionality (autocomplete on search). Change to server-side rendering and incorporate use of a database to store the data already fetched. Month 2 Create own website with blog system and simple CMS. Month 4-(excluding Month 6)-12 Start working on my startup idea (which leverages project from Month 1-2). First would be creating a (normal) web app, and if successful ultimately convert to a blockchain based app. Month 6 Creating a simple Ethereum smart contract in solidity and get to know blockchain app tools. Month 12 - 24 [depends on developments in the first year].

In the projects I use the resources online to help me learn. I like courses at Udemy (though they are becoming a bit slow), and recently discovered egghead.io, frontendmasters and pluralsight which seem to have courses more geared towards more experienced users.

3. Internship After 2 months (after I have a bit more education and hopefully my personal website done) I would also be searching for internships with blockchain startups in Berlin. I may not be able to add much value right off the bat, but I would work on a low pay and could maybe be a tester so that should be a good value proposition for them. Furthermore I have a very good background in legal, international taxation, finance and accounting. Though I would not like this to be my main job at the company, I would be able to help most startups significantly in this respect while hopefully learning more about coding and programming at the company. Obviously if I would have the internship I would have less time for my above curriculum but that's why I built in some extra cushion (only 8.5 hours a day, and no weekends). Based on my experience in law internships are the best way to learn though, so definitely hope some blockchain startup companies would be willing to give me a shot as an intern.

4. Blog Sunday would be writing a blog post highlighting what I learned the past week and delving into one or two subjects I encountered along the way that interested me. The blog would have two purposes: The blog will force me to recap what I learned during the week thus reinforcing retention. The blog will be serve as an evidence trail towards future recruiters that I have put in the work and have the necessary knowledge. Especially considering that I will have no formal education in IT (though I do have two master degrees already, one in Economics and one in Tax Law).

Alternatives not included in above schedule Things I have considered but opted not doing:

  1. 8-12 week (online) Bootcamp. Besides believing that one would need to devote more time than 8-12 weeks to have the necessary skills to be a full stack web developer, the costs are too high. I would really like to do a bootcamp to do pair-programming and have review of my code by top tier developers, but the costs of 15K-18K dollar for a bootcamp would be approximately 1 year of living expenses in Berlin. And I am convinced I can do more in 1 year myself than 8-12 weeks in a coding bootcamp as I have the discipline to grind long hours.
  2. Going back to university and getting a degree. I did considering this option, but after a lot of thinking I decided that this would probably be of lesser quality than the course available online and would in the end require more inefficient time. Furthermore I don't have enough money to study again for 4 years.

Summary of schedule The first 2 months I would spend full-time on web-development. After month 2 I would spend 5 hours per day on computer science foundations and 3.5 hours per day on web application/blockchain application development from Monday to Friday. Saturday would be my off day to recharge. Sunday would be a semi-off day working on my blog.

Many thanks! Kind regards, chocomel1

vitkarpov commented 6 years ago

@chocomel1 looks like an inspiring story's about to start! 👍 What's your blog link? I'd subscribe.

jamaldewitte commented 6 years ago

@vitkarpov Thank you. The blog is not online yet (on the todo list :) ), but I'll post the link here when it's up and running!

Booligoosh commented 6 years ago

@chocomel1 I would say put it up with a landing page start collecting emails anyway, it doesn't hurt to have some followers right when you actually start - you already would have two 😜

kentcdodds commented 6 years ago

Hi @chocomel1!

Sounds like a really well thought out plan! Here are a few thoughts:

It's very likely that life will get in the way and things will come up, so while you have everything planned out so well, don't be surprised or disappointed if things take longer or happen in a different order than you had hoped.

This is going to take a ton of work. I get the impression you're up for it, but be prepared to fail a LOT. That's where you learn though. I have an entire talk about how to maximize the time investment you put into learning and increasing your skills.

Learn things in the right order. Specifically with React it can get very overwhelming. I suggest following this approach. In general though, focus on your desire to make something awesome and that will motivate you when things get tough. But try to avoid biting off too much at once.

Sunday would be writing a blog post highlighting what I learned the past week and delving into one or two subjects I encountered along the way that interested me.

I do exactly this. Sunday evenings, for about an hour or two, I write for Kent C. Dodds News, I send it out the next morning, and two weeks later I publish it to my blog. I highly recommend it. Start now!

Your summary sounds good. Avoid being too rigid with your schedule and make sure to make time for developing lasting relationships with people you care about and come to love. Programming and computers are fun, but when there's nobody in life to share the life experience with, you have a hard time finding fulfilment.

Good luck!

morajabi commented 6 years ago

@chocomel1 Reach me when you wanted to do an internship. Maybe I could help you then.

jamaldewitte commented 6 years ago

Thank you @kentcdodds for the response. I watched your video and it made a lot of sense! The last part of your comment I have to make sure to follow, as I do tend to get really absorbed in my work.

For anyone wishing to follow me or look at my website. I made a very simple wordpress website for the time being, and am working on my own website. The website is http://jamaldewitte.com and I will be posting weekly blog items now that I am a bit settled in my new place. Still seems to be some DNS issues from the hosting side, but this should be taken care of in a few hours.

@morajabi Thank you so much, I'll be sure to reach out to you when I feel confident in at least my basic development abilities!``

morajabi commented 6 years ago

@chocomel1 After some point, consider building a reputation in the community for yourself, e.g. be active on Github, Twitter, or in communities. It's not my AMA, sorry Kent.

Booligoosh commented 6 years ago

@chocomel1 It would be cool if you joined https://programmingbloggers.herokuapp.com/ - it's basically a Slack community for programming bloggers, and we have people ranging from complete beginners to very experienced. Good job on the commitment btw, really impressive 👍

P.S. You should really add a mailing list to your site, ASAP. Even if you don't know what you'll be doing with it yet, just collect emails. Later you can set up for the new posts to end up in their inbox, and also give people updates (or possibly even ask something if you have a good relationship with your subscribers). But seriously, just do it.

jamaldewitte commented 6 years ago

@Booligoosh I joined :) I'll set up a mailing list soon!

@morajabi Definitely agree on that. Will be something to work on as I don't use social media that much in my personal life. As a start, I made a twitter today (https://twitter.com/jamaldewitte1) and updated my github personal information a bit.