Skip to content

Instantly share code, notes, and snippets.

@fj
Last active January 24, 2016 17:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fj/d38d345768c69e40a969 to your computer and use it in GitHub Desktop.
Save fj/d38d345768c69e40a969 to your computer and use it in GitHub Desktop.
letter I received from a new developer

Hi John,

I am {name redacted}, a 4th year student @ {university in India}.

I was looking up for list reversal problem in stackoverflow and came across your solution. I liked the solution a lot and went ahead and checked out your profile on SO. Then I visited your linkedin profile and then I realized you are totally experienced developer.

I read ur summary( really loved ur philosophy on design!! simply awesome) and went through all your contributions to the developer world. I also visited all ur github repos and saw ur open source contributions. I really liked ur project awesomesauce although my javascript skill is not that proficient to understand most of your code.😁

Well I also want to become a great developer like you. I am 23 yrs old(feeling a bit depressed that I'm not yet a good programmer.)

I'm good in Python3(don't have a clue what python 2 coding is) , fairly skilled in java, c(don't remember much), HTML 5(really good), css3(very poor), JS(quite good), PHP(okay okay). I have a fair knowledge on OS,Web tech, algos and ds(poor ,but working on it everyday),Apache,Linux scripting.

Recently I got placed in {web development shop in India}. It's a web based company.

I seek your advice on 6 things.

  1. I want to be a very good programmer What's your advice for me? I code for around 3.5 hrs daily. But i tend to forget code that I recently developed or code for the algo problem that I recently solved. How do I become a very good programmer?

  2. How do I start working on open source projects? Recently I learned git thoroughly (spent around 20 hrs on it !). Now I have good grasp over it. But when I tried to work on ubuntu source code, I learned that they don't have a repo on github. Their website said I have to join their mailing list first and then they may allow me to fork their repo(which I think is on launchpad or something). How do I start working on open source projects and any project suggestions?

  3. I find there is too much to learn in comp science. How do I go about learning it. I have a strong desire to learn almost every single field out there OS, virtualization, cloud, web frameworks - > node,angular,ruby,php , Cloud Tech, Machine Learning, Data Analytics, Cyber security,N/working. How do I go about it?

  4. How do I learn in various of the above topics Even Though I have 8 hours office work at {redacted workplace}. ? I'm worried I won't be able to focus on my favorite topics , when working for their web based company! here's their website: {redacted}

  5. How do I keep myself motivated ? Sometimes the sheer size of the project scares me off! How do I learn to program well in any language I choose?

  6. What's your advice for me to choose a career path. I love Computer & n/w security a lot. But I hear that there is not much scope for Security. Is this true? I also like AI and data mining.(although I have almost never have learnt anything related to those). Is machine learning a good prospect.! ?

As a kid I loved Physics . The thought of Quantum Computers really excites me . what do you think is the future of Quantum Computing ? Is it a viable choice of career path?

I'm sorry to be bugging you with this huge letter but I really need your advice.

Thanking You, With regards, {name redacted}

hi {name redacted},

Thank you for writing in. I appreciate your kind words, but I do not consider myself a great developer, just someone who very much enjoys building things with computers. So I am not sure if I am qualified to provide a good answer to all of your questions, since they are about how to become a great developer, but I will try my best.

  1. How do I become a very good developer? I spend time every day writing code, but I tend to forget code that I recently developed or how to code some algorithm.

There are many roads to acquiring skill, and no road is the best in all situations. But here is one path you might take:

  • Build things that you like. Build things that other people like. Do this a lot. Learning how to be a developer is about construction and creation and enjoying what you build. It is not about memorization or knowing "how to code some algorithm".

  • Instead, it's more about finding patterns in your experiences and connecting them. When you build and you see what results, pay attention to the patterns that occur -- not just in the software you wrote, but in people and the relationships between them, and in how that becomes software. Wonder about why this is, and formulate your own explanations for it.

  • Understand that you will frequently be wrong. You should constantly be revising your idea of the best way to do something. Be skeptical of people who are certain about everything, and especially yourself, if you feel sure that you are correct about a complicated idea. Test your own assumptions, and understand what assumptions others are making.

  • Stay humble. Have empathy. "Be kind to others, for they are fighting a hard battle."

  • Most importantly, help people. When you teach others something, you improve yourself.

When you can do all these things you are on your way to being a great developer.

  1. How do I start working on open source projects? Recently I learned git thoroughly (spent around 20 hrs on it !). Now I have good grasp over it.

Git is a powerful tool. But it is a complex tool. And complex things have many uses, many edge cases, and many surprises both wonderful and frustrating. It is important to understand that it is unlikely that you can learn a complex tool thoroughly in twenty hours of study.

Instead, you learn by using the tool, by integrating it into your work, and finding uses for it that you feel comfortable with, and which help you.

So you have started learning git, but you are not finished. And you will never be; every good developer knows that learning is an ongoing process that never ends. You just get better at learning and seeing the patterns.

When I tried to work on ubuntu source code, I learned that they don't have a repo on github.

I love GitHub, and it is immensely useful. But GitHub is only a company -- it is not the entire universe of software development. There are many places to work with people, and sometimes you will need to work in environments that are confusing or bewildering to you, or at least just different from what you're used to, in order to help them.

I want to highlight that it is important to be open to many kinds of ways of writing software, including ones you don't understand yet or which you don't like.

Their website said I have to join their mailing list first and then they may allow me to fork their repo(which I think is on launchpad or something).

Ubuntu isn't one project -- it's a collection of many projects, or a "distribution". You contribute to the individual projects and the maintainers of the distribution join together to make new releases that combine the individual projects in the distribution. See here if you want to work on Ubuntu -- find a part you like and contact that person.

How do I start working on open source projects and any project suggestions?

There are so many great places to start, and so many different skill sets involved, that it's hard to give one specific suggestion since I don't know you very well. But I would start with someplace that is friendly to newcomers and which works with them to make them contributors. Mozilla, for example, has a very healthy community around welcoming beginners.

  1. I find there is too much to learn in comp science. How do I go about learning it. I have a strong desire to learn almost every single field out there OS, virtualization, cloud, web frameworks - > node,angular,ruby,php , Cloud Tech, Machine Learning, Data Analytics, Cyber security,N/working. How do I go about it?

It seems like you think that you need to learn everything in order to be good at anything. This isn't true: being bad at something is the first step to being good at something. But you need to build things if you want to understand the limitations and benefits of technologies or ideas in computing.

So don't worry about "learning everything", which is impossible anyway. Instead, build! You will learn by doing.

  1. How do I learn in various of the above topics Even Though I have 8 hours office work at {redacted name of workplace}? I'm worried I won't be able to focus on my favorite topics , when working for their web based company! here's their website: {redacted website}.

Make your work into your own learning experiences -- find places to intersect your interests with your job and you'll have a lot of room to grow. How much freedom you have to do this is going to depend a lot on your workplace, but I think that this is one of the best ways to learn -- you're getting paid for it!

However, if you don't have the opportunity to do this, it is important not to come home from a long day at work and immediately go back writing code. Take a break; you will not become a good developer by burning yourself out.

  1. How do I keep myself motivated? Sometimes the sheer size of the project scares me off!

That's why I suggest picking a community that's welcoming and will help you understand a small piece of the larger puzzle. Then you can get comfortable with that piece and pick another piece, and another, and another. And soon you understand much of a complex project. Don't worry about climbing what seems like a mountain: focus on taking one step at a time, and soon it will not be as high as you might first have thought.

How do I learn to program well in any language I choose?

Again, I think the path to greater skill lies in experiencing computing by building many kinds of things and learning from the patterns that emerge.

  1. What's your advice for me to choose a career path? I love computer and network security a lot. But I hear that there is not much scope for Security. Is this true? I also like AI and data mining.(although I have almost never have learnt anything related to those). Is machine learning a good prospect?

It's hard for me to give you advice here, and I think this is something you'll probably have to decide for yourself. What is a good career path for you will depend on many factors -- what kinds of projects and people you like to work with, what kinds of tools you enjoy, whether you like building new things or improving existing things more, and so on. I don't think any advice I could give you would be useful.

As a kid I loved physics. The thought of quantum computers really excites me. What do you think is the future of quantum computing ? Is it a viable choice of career path?

I think quantum computing holds a lot of promise for how we solve problems and interact with computing, but I also think we have a long way to go. But it is, as you might expect, a very rich and complex topic, and I'm not qualified to give you an answer to the question of whether it's a good career path. I can only say that if you really love it you should certainly take a look at it.

I hope some of this was helpful. Good luck, and keep building things. Maybe one day I'll come across something you wrote!

best,

John Feminella

twitter: @jxxf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment