In this post I told you I got my first job offer. Well, I took the job and it has been roughly a month since I started working. I’ve learned a lot and I also got a lot of questions (shoutout to @revisualize for providing the first set of them), to which I wrote down some answers. Feel free to ask me more questions and I will try to answer them as best I can. Note that this is just my point of view and I’m only at the beginning of my career as a coder.
Why did you learn to code?
I initially started because I had a business idea. I worked in the book/publishing industry for a very long time and was always annoyed by the quality of the software (think windows 2000, it gets the job done, but the UI is horrible and it is very outdated, with loads of things that don’t work anymore). I had this grand idea to build something that would replace that. I still have this idea in the back of my mind, but want to have some years experience in a professional team, so that I don’t make rookie mistakes along the way.
Another reason was because I thought I would be good at it. I have a degree in Philosophy, which is fun and interesting, but I also have a small family to support, so I needed to learn a skill that would help me do that. I love puzzles and always liked thinking about logical/efficient ways to solve them, so programming is a natural fit for me. Looking back, I cannot really give a good reason why I started this late.
What resources did you use to learn?
I’ve been interested in computers for a long time and have been dabbling in coding for a bit every now and then. Only last fall did I find myself in the position where I could spend a lot of time learning it. Before joining FCC, I’ve spent some time learning the basics on codecadamy, but this was years ago and I didn’t remember a lot of it except the basics. I’ve also built some simple websites before using content management systems like joomla! and wordpress. In the fall I started learning coding in a more structured way, and it was actually the first time I started to write some code, which was instrumental in becoming a coder. I’ve learned a lot from FCC, a lot more than any other resource, although I’ve done several other MOOCs. What I think FCC does very well is the interactive element, where you are forced to write code and come up with answers to problems yourself, by looking things up yourself and practicing/experimenting with code. After finishing most of the coding puzzles on FCC, I also did a lot of them over on codewars. These can be a lot more complicated than the ones on FCC and they helped me to deepen my understanding. As I said in a previous post on the forum, I believe the number one thing that helped me to learn how to code was to teach others and help them understand their code better. It helped me to be very precise in explaining how things work and this is instrumental to internalizing the knowledge.
I also read a lot: docs on MDN, books (You don’t know JS), blog posts (I really like Eric Elliott’s posts on Medium) and watched a lot of youtube videos on coding. Overall I would say that reading helped me learn better than videos, as it is a more active form of engagement, but writing code is even better and teaching others is the best.
On average, I think I learned to code pretty much 32-40 hours a week.
What do you think you did well during your learning process?
What I did well was to iterate on my solutions to find better and better solutions to the same problem. This helped me to see multiple ways to solve a problem. My motivation to learn to code was huge and the more I did it, the more I liked it. Helping others, again, was something I did a lot, and I got better and better at helping others, which made me a better coder in turn. I learned to recognize not only bugs in other people’s code, but also learned to read their intentions in writing the code and could at some point see the misconceptions they had just by looking at the code. That taught me a lot about teaching people, about adjusting people’s beliefs by gently, step-by-step, guiding them through how the code works.
What did you feel was the best learning environment? When experiencing burn out, or frustration, how did you step back and regroup yourself?
I work best in a quiet place with some soft instrumental music on (lyrics distract unless they are in a language I don’t understand at all). Whenever I hit a block where I have to think hard to oversee all of the different parts of the thing I’m working on, I stand up and walk for a bit, stare out of a window, or play some guitar to put my mind off of it. I also do this whenever I just got a major insight on how things fit together. It is a way to empty my mind and start afresh on the problem at hand afterwards. Thinking in a focused way is only possible when your mind is quiet.
Now at work I often stare out the window when I’m working on a problem I can’t directly solve. It helps to put my mind at ease and when I do, an idea usually pops up.
Where do you feel that you could / should have improved or done better?
I wanted to learn everything and know everything. I was always like that in any field I studied before, but this time it was extreme, and due to the absence of a formal structure (except for the FCC exercises), I often wandered and started learning other stuff on the side, making it less focused than what is good for acquiring a skill. I remember often learning things without applying them and this resulted in passive knowledge, which, although useful in an intellectual way, is pretty useless when it comes to learning to code something real.
There are also areas that I’m not good at just because I don’t like doing it (CSS/Styling is not my thing). I know I don’t have to know everything about it, but I am still not completely comfortable with it and that is basically because I avoid doing it unless I really have to.
What stack do you advice others to learn?
I think the MERN stack taught at FCC is a great choice at this point in time. My path went a little different than most people, as I started with frontend, moved directly to backend (learning Node/Express and Mongo) and only later started learning React/Redux. I think React is a great framework to learn, not only because of its popularity, but also because it forces you to write code in a, well…, reactive way, with a lot of embedded functional concepts. Learning Node is an easy way for people who know some JS to learn backend technology, RESTful APIs and so on and Mongo fits JS like a glove. So it is one of the quickest-to-learn stacks (only 1 language!). However, I do think on FCC there is room for improvement (partly already done in beta) to integrate some concepts in a deeper way. I hope to find some time in the near future to help out on that part to and to contribute to the platform in that way.
Any general learning advice?
- Always challenge yourself by building more complex projects and solving more complex problems. At the same time, always understand the code you wrote and why it passes a certain test or performs a certain behaviour in a project. If you don’t understand it, keep reading the docs until you do, because moving on doesn’t make sense if you wrote something that is like a magic black box to you.
- Follow your excitement when it comes to learning certain skills. If you enjoy designing, become great at CSS and give yourself challenges for that. If you enjoy coding puzzles, solve some advanced katas over at codewars, if you get excited about learning some higher level concepts, pick up an advanced book or learn a completely different programming language, if you like presenting data in an interesting way, use all your skills together and build something complex. It doesn’t really matter, as long as you are learning something while doing it. The point is that excitement will help you grow the most. If it feels like a chore, don’t do it.
- Be inquisitive!
- Don’t be afraid to read. Learn to read technical documentation. If you cannot read it, you cannot write it.
- Don’t be afraid to write. Practice makes perfect: fail fast, fail often, that way you learn the most in the least amount of time.
Can you describe the role you are working in now?
I work as a Frontend developer at a company that builds software for installers of Solar Energy Systems, to help them design systems and calculate yields. We work with Angular/Redux on the fontend and Python/Django on the backend, making heavy use of docker/CI. We also connect to several different databases (Postgres, Mysql) and get a lot of different data (3d data for the height maps, geographical maps, climate data, and so on), which are all combined in the frontend.
How do you feel that your learning process helped you to get the role that you’ve achieved?
My past experience also helped me a lot. I’ve been working in more customer oriented fields for a long time and my soft skills are strong, so that helped me connect with the people that were hiring me quite easily.
How do you feel learning was lacking after you’ve gone through the process of getting the role?
Oh my… The first few weeks on the job I felt like a complete noob. I didn’t know much angular, felt my git skills were less than adequate, struggled a lot with getting docker up and running and it took me far longer than I would have liked to get up to speed. I would have liked to learn more about testing as well before I started. I could read tests, but never wrote any. Once I got to coding I felt more comfortable and the other developers I work with actually assured me that my code is good, although I still have the feeling things take a lot longer than they should. Looking back, I did put some pressure on myself (and still do) to understand their whole app, while obviously that is objectively quite impossible because of all the moving parts and the amount of time I spent on it.
I learned a lot in the past month since I started and really look forward to learning more and more each day. I love programming and love working with people that are incredibly smart.
How many roles did you apply for before landing this one?
This was the first and only job I applied to. I saw the vacancy, thought that it was an interesting company and applied. I am aware this is not common, that it is partly due to luck, but that the time and effort I put into learning to code paid off too.
How did you apply to the roles that you were attracted to?
I sent them an email with a link to my github and a short summary of the things I learned since starting to code in the fall. The email wasn’t too formal (I’m wasn’t looking for a very formal company, that is not my style, so I don’t project that outward when looking for a job), but it was to the point and just showed them I was interested.
Did you have location boundaries when searching for jobs?
Well, I just moved back to the Netherlands after spending a winter in Portugal. I have a girlfriend and daughter, so anywhere where they would be comfortable would be ok for me, but I did look in the Netherlands, because a) there’s a lot of work for developers here, b) I’m Dutch and know and like the working culture. The location of the company is a bit far from my current home, but I can work from home most of the time, which I love.
How was the interview? Did they ask you any questions about Computer Science-y stuff: Big O Notation, Stacks, Binary Trees, Link Lists, Queues, Optimizing Sorting Algorithms, Red Black Trees, Bit manipulation, Hash Tables… Just to name a few. Did you have to Whiteboard during any of the interviews?
The interview process consisted of a phone screening and a technical interview. The main thing we talked about on the phone was the hypothetical implementation in code of my favorite boardgame (I blanked when they asked me my favorite game and I could just come up with chess). So we talked about that and about some coding concepts along the way. I wasn’t completely sure I did so well, but they called me back and wanted to do an in-person interview. During this interview they put me behind a computer and asked me to do some coding problems. The first few were easy and when they saw I passed them with relative ease, they gave me the hardest one they had. I couldn’t finish it properly and I don’t think I handled the problem correctly in their presence. After that they gave me a React/Redux app (I put React/Redux in the list of skills I learned) which they botched and asked me to fix it. It was basically writing a reducer function that mutated the state in the desired way. This part of the interview went flawless.
What I did well during the process was explain what I was thinking as I was solving the problem. I explained the decisions I made and how I thought pretty well. What I didn’t do well was follow their suggestion to write code to pass the tests (of the initial three coding problems). It was a way of writing code that I wasn’t used to at the time and they definitely saw that.
I was a little surprised they called me back the next day to offer me the job, because I didn’t do as well as I could have, but at the same time I know that my coding skills are good for someone who only started in October, and I guess they saw that too.
So… no Big O, no whiteboard, no weird data structures. Although I do know the basics, they wanted to test skills that are actually required on the job, which is writing code and being able to explain clearly how you do things.
What do you like most about the job?
I love learning and getting paid at the same time! I’ve been a life long learner and this opportunity to learn things, get better at the craft of coding and at the same time earn a living is a dream come true. I love the freedom of being presented with a problem, finding a way to solve it and I feel good everytime I manage to solve a problem that seems too complicated a few hours prior. I love then getting feedback from experienced coders on why certain ways of doing things can be done better in a different way, and to use that feedback to gain both insight and write better code.
Any advice on getting a job?
As I only did one interview, I can’t say I’m an expert. But I believe being frank about what you can do and what you still need to learn is vital. Show them what you can do (put all your code on github, and perform when they ask you to write some code), and tell them what you would like to learn and why you think that is important. In other words: be realistic about your skill level and at the same time demonstrate that you learned some things. Show them how you solve problems. Knowing the precise way an obscure method works is unimportant, knowing how to find out how that method works is essential. Added benefit of being frank is that you don’t pretend to know more than you do, so you won’t feel like an imposter and are more relaxed. Your soft skills will benefit from that. I think it is reassuring for both the person hiring you and yourself if you can honestly say: “I don’t know”, or "I never thought about that before"
Learn (at least) one modern framework, but don’t limit your job search to only that framework. I learned React/Redux, but am working on an angular app now. If you learn one, the next one will be easier. Also, don’t get lost in a framework and just focus on that. It is key to know the basics very well, as that makes you more flexible and makes any framework easy to pick up.