Sort
Profile photo for Bhaumik Patel

I don't have technical advice for you but there's a quote that I read whenever I need some extra inspiration. Chris Hadfield, an astronaut who was literally orbiting the Earth at the time, did an AMA [Ask me anything] thread on Reddit. Someone asked him for advice on the field and I think his answer can apply to ANY career goal.

{Background first}

I found this advice at a very important moment in my life. I had spent my whole life through college thinking I was going to be a doctor. My parents had made that promise to my entire extended family. I wanted to switch into programming but felt lik

I don't have technical advice for you but there's a quote that I read whenever I need some extra inspiration. Chris Hadfield, an astronaut who was literally orbiting the Earth at the time, did an AMA [Ask me anything] thread on Reddit. Someone asked him for advice on the field and I think his answer can apply to ANY career goal.

{Background first}

I found this advice at a very important moment in my life. I had spent my whole life through college thinking I was going to be a doctor. My parents had made that promise to my entire extended family. I wanted to switch into programming but felt like it was too late. I figured that I had wasted too much time, money, and mental energy already so I might as well finish it up.

Horrible advice.

I needed to find a different career path. Programming came to me suddenly after watching Alexis Ohanain (co-founder of Reddit) speak at UVa. He had a few eye-opening things to say about entrepreneurship and the tech scene. What specifically stuck out was his line "50-100 years ago, you needed a factory and hundreds of employees to start a company. Now, you just need a laptop." He also pointed to the library where they had actually registered the domain for reddit.com a few years earlier. That hour changed me. After I started dabbling with a little Codecademy, I found Thinkful - a new edtech startup that matched you up with a personal mentor to guide your journey. A few weeks into the course, I had hit the beginner's wall, was bummed about my recent performance and questioned this crazy life decision.

But then, I read Chris Hadfield's response to "Any advice to a young person who wants to get into this field?"

Decide in your heart of hearts what really excites and challenges you, and start moving your life in that direction. Every decision you make, from what you eat to what you do with your time tonight, turns you into who you are tomorrow, and the day after that. Look at who you want to be, and start sculpting yourself into that person. You may not get exactly where you thought you'd be, but you will be doing things that suit you in a profession you believe in. Don't let life randomly kick you into the adult you don't want to become.

That changed me. I'm now driven more than ever to thrive in tech. Maybe I'll start my own company some day :)

[3 year update!] After learning to code with Thinkful's frontend course, I applied to join the school and now help our Web Development Career Path students land full-time programming jobs! They're not "world-class coders" yet but certainly well on their way. The circle has closed :)

If you're interested in that course or just need general career advice about learning to code, advancing your existing skill set, or getting into tech/startups in a non-technical role, feel free shoot an email to bhaumik@thinkful.com. I absolutely helping out people in the midst of a career transition. (You can also DM me here but expect faster responses over email).


p.s. Someone* saw the post and turned it into a comic :)

* "That someone is named Gavin Aung and runs a super cool blog making comics out of famous quotes called http://zenpencils.com" - User in the comments

Profile photo for Alexander Duchene


Accept that in 3 years you won't be close to a world class . World class coders have been practicing since before you were born and continuously improving their craft; you simply can't catch up so quickly.


Accept that in 3 years you won't be close to a world class . World class coders have been practicing since before you were born and continuously improving their craft; you simply can't catch up so quickly.

Where do I start?

I’m a huge financial nerd, and have spent an embarrassing amount of time talking to people about their money habits.

Here are the biggest mistakes people are making and how to fix them:

Not having a separate high interest savings account

Having a separate account allows you to see the results of all your hard work and keep your money separate so you're less tempted to spend it.

Plus with rates above 5.00%, the interest you can earn compared to most banks really adds up.

Here is a list of the top savings accounts available today. Deposit $5 before moving on because this is one of th

Where do I start?

I’m a huge financial nerd, and have spent an embarrassing amount of time talking to people about their money habits.

Here are the biggest mistakes people are making and how to fix them:

Not having a separate high interest savings account

Having a separate account allows you to see the results of all your hard work and keep your money separate so you're less tempted to spend it.

Plus with rates above 5.00%, the interest you can earn compared to most banks really adds up.

Here is a list of the top savings accounts available today. Deposit $5 before moving on because this is one of the biggest mistakes and easiest ones to fix.

Overpaying on car insurance

You’ve heard it a million times before, but the average American family still overspends by $417/year on car insurance.

If you’ve been with the same insurer for years, chances are you are one of them.

Pull up Coverage.com, a free site that will compare prices for you, answer the questions on the page, and it will show you how much you could be saving.

That’s it. You’ll likely be saving a bunch of money. Here’s a link to give it a try.

Consistently being in debt

If you’ve got $10K+ in debt (credit cards…medical bills…anything really) you could use a debt relief program and potentially reduce by over 20%.

Here’s how to see if you qualify:

Head over to this Debt Relief comparison website here, then simply answer the questions to see if you qualify.

It’s as simple as that. You’ll likely end up paying less than you owed before and you could be debt free in as little as 2 years.

Missing out on free money to invest

It’s no secret that millionaires love investing, but for the rest of us, it can seem out of reach.

Times have changed. There are a number of investing platforms that will give you a bonus to open an account and get started. All you have to do is open the account and invest at least $25, and you could get up to $1000 in bonus.

Pretty sweet deal right? Here is a link to some of the best options.

Having bad credit

A low credit score can come back to bite you in so many ways in the future.

From that next rental application to getting approved for any type of loan or credit card, if you have a bad history with credit, the good news is you can fix it.

Head over to BankRate.com and answer a few questions to see if you qualify. It only takes a few minutes and could save you from a major upset down the line.

How to get started

Hope this helps! Here are the links to get started:

Have a separate savings account
Stop overpaying for car insurance
Finally get out of debt
Start investing with a free bonus
Fix your credit

Profile photo for Hanno Behrens

You won’t ever become a world-class coder.

Nobody is, kid.

Tell you a story about a boy, who was a coder without a computer. Me. It was in 5th class. None of us ever had seen a computer. We even didn’t have pocket calculators. There was someone in my family who worked at the Phillips laboratory’s in Hamburg, where I live. But that was all I knew.

And I had to write an article. It was a test in my German class. I had a teacher, who was a passionate bicyclist. And the headline that we had to write was: “How do I wash my bicycle?”

That’s a program.

And at that age, at that time I knew what I will beco

You won’t ever become a world-class coder.

Nobody is, kid.

Tell you a story about a boy, who was a coder without a computer. Me. It was in 5th class. None of us ever had seen a computer. We even didn’t have pocket calculators. There was someone in my family who worked at the Phillips laboratory’s in Hamburg, where I live. But that was all I knew.

And I had to write an article. It was a test in my German class. I had a teacher, who was a passionate bicyclist. And the headline that we had to write was: “How do I wash my bicycle?”

That’s a program.

And at that age, at that time I knew what I will become. I will become a programmer, someone working with computers, programming computers. And I did write how to wash a cycle. I went into details, I described things that were small and tiny and really most people even don’t notice that this can be done.

It was my longest work in German. It was detailed, meticulous, smart, brilliant. It was the best I had ever written. I had always been a bit lazy for school, but I didn’t had to put too much effort in it anyway. I never did homework. Because I could just sit there, pretending I was reading it up and solving the stuff on the fly in my head.

So my teacher was impressed. A week later there was a parent-teacher conference and my mother was also talking with that teacher to hear how I was doing. “Did he show you his work! That was brilliant! Do you really…”, and he was going into small details about washing the bike, that I mentioned. And asking my mother if that was true or not. She just smiled. She was a very young and pretty mother, by the way.

“My son has never in his life washed his bicycle. His father does this”, she said.

It was all in my head. I was eleven.

I started programming at that age. It would be for three years that I would even know what a programming language was. It would need three years before I first would touch a computer. And it would be two years before I get my first pocket calculator.

But I started programming. Everything was a program. I analysed things, I automated them in my head.

And with 14, after two weeks of frustration with the inabilities of BASIC I hacked myself into assembly language for the 6502. Without a book. Without a “floppy drive”, I only had a cassette drive. And to use that, I had to program a driver to make that thing going.

I started to do commercial works with 15. Nothing big, I still was a kid, don’t forget that. But it was commercial work, people paid me to program.

And I went on like that. Every day. From the first light of the day until the sun goes down. And then I sit awake until deep in the night, until my head crashes the first time on the table. I make a few notes to be able to go on next morning and go to bed.

This I’m doing since I was 15. I don’t think that I’m a world class programmer. But I love my work, I deeply love it.

And that’s the reason why I am at this and why I am doing this. And why I spend my life for this. Why I try to help other people. Not for fame. Not for money. For love.

I don’t think that I’m smarter than many others. But I am dedicated like nobody I know is. Most people fear to invite me to their company. Because I tend to make them look bad in front of their bosses. I don’t want that. But that’s how it is. But that doesn’t mean that I’m really better. I think I’m not. I know enough about computer to know, that I know nothing of the field. And that field is even exploding. Some say: “Look! What has happened in the last 10 years!” And I just sigh. Because I know that they know nothing about all the things that are under the carpet, under their horizon. Before they started in that field, before these 10 years.

Ten years is nothing. You have to reinvent yourself every five years or you are out. So yes, you can catch up with the newest things, but you will have lost the grip to all that is below that. To all that wonderful things, that you still haven’t seen. Beyond the surface. In Linux drivers that have been deactivated by 2.2 to 2.3 change. Or by the change of 2 to 3. That were wonderful but that nobody knows how to make work again.

I stored those things. I have them lying around and I just hope I can take the time to activate them again. Because the creators of that stuff are long gone hackers. Maybe they are dead. Maybe they have turned their back to my world.

Some of that takes years to understand how it works at all.

And that’s just the little fun things, that I have found, like sea shells that a wanderer collects on his travels. This world is so huge and so wonderful. And you will never get to the pot with the gold at the end of the rainbow.

Because the rainbow just runs away faster from you than you can follow.

This is a world you can not conquer. This is a world where you can live in, where you can be at home and that you can love.

And that’s what that’s all about. You wont become a world class programmer in three years. But we can see, how we can throw oil in this fire. This fire is, what counts. And it will get you somewhere.

Somewhere beautiful.

Profile photo for Assistant
Assistant

Becoming a world-class coder in under three years is an ambitious goal, but with dedication, focused learning, and practice, it’s achievable. Here’s a structured approach to help you reach that level:

1. Set Clear Goals

  • Define what "world-class" means to you. Is it contributing to open-source projects, landing a job at a top tech company, or building innovative software?
  • Break down your goals into short-term (monthly) and long-term (yearly) targets.

2. Choose Your Focus

  • Decide on a programming language or technology stack based on your interests (e.g., Python, JavaScript, Java, C++, etc.).
  • Consider

Becoming a world-class coder in under three years is an ambitious goal, but with dedication, focused learning, and practice, it’s achievable. Here’s a structured approach to help you reach that level:

1. Set Clear Goals

  • Define what "world-class" means to you. Is it contributing to open-source projects, landing a job at a top tech company, or building innovative software?
  • Break down your goals into short-term (monthly) and long-term (yearly) targets.

2. Choose Your Focus

  • Decide on a programming language or technology stack based on your interests (e.g., Python, JavaScript, Java, C++, etc.).
  • Consider areas like web development, data science, machine learning, mobile development, or systems programming.

3. Structured Learning Path

  • Foundational Knowledge (0-6 Months):
    • Take online courses or attend coding bootcamps (e.g., Codecademy, freeCodeCamp, Coursera).
    • Focus on algorithms, data structures, and basic software development principles.
  • Intermediate Skills (6-18 Months):
    • Work on personal projects to apply what you’ve learned. Create a portfolio of work.
    • Contribute to open-source projects on platforms like GitHub to gain real-world experience.
  • Advanced Concepts (18-36 Months):
    • Explore advanced topics like system design, cloud computing, and software architecture.
    • Learn best practices in coding, testing, and debugging.

4. Practice Regularly

  • Solve coding challenges on platforms like LeetCode, HackerRank, or Codewars.
  • Participate in hackathons and coding competitions to sharpen your skills under pressure.

5. Build a Portfolio

  • Create a GitHub profile to showcase your projects and contributions.
  • Work on diverse projects that demonstrate your skills and interests.

6. Networking and Community Engagement

  • Join online forums, local coding meetups, or tech communities (e.g., Stack Overflow, Reddit, Discord).
  • Connect with other developers, seek mentorship, and share your knowledge.

7. Stay Updated

  • Follow tech blogs, podcasts, and YouTube channels to stay informed about industry trends and new technologies.
  • Read books on coding, software development, and system design.

8. Soft Skills Development

  • Work on communication, teamwork, and problem-solving skills, as they are crucial in collaborative environments.
  • Learn to receive and provide constructive feedback.

9. Seek Real-World Experience

  • Internships or part-time jobs in tech can provide invaluable experience.
  • Engage in freelance projects to gain exposure to different coding environments and client needs.

10. Reflect and Iterate

  • Regularly assess your progress toward your goals.
  • Be open to changing your learning path based on your interests and industry demands.

Conclusion

Dedication, structured learning, and consistent practice are key to becoming a world-class coder in under three years. Focus on building a strong portfolio and engaging with the coding community to enhance your learning experience.

Profile photo for Lyudmil Angelov

I can echo some of the sentiment expressed elsewhere in the thread, but with a twist. Like any craft, learning to be a good coder takes a proportional amount of practice. So, you do need to read and write a lot of code.

What I don't think works (for a newbie coder)


Contributing to open-source projects
A lot of projects, even if they're popular and bug-free, don't have particularly well-factored code, which is what I assume you want to be learning how to do. Also, in my experience, the more popular the project is and the better the people working on it are, the more difficult it is to break into

I can echo some of the sentiment expressed elsewhere in the thread, but with a twist. Like any craft, learning to be a good coder takes a proportional amount of practice. So, you do need to read and write a lot of code.

What I don't think works (for a newbie coder)


Contributing to open-source projects
A lot of projects, even if they're popular and bug-free, don't have particularly well-factored code, which is what I assume you want to be learning how to do. Also, in my experience, the more popular the project is and the better the people working on it are, the more difficult it is to break into and feel like your contributions matter.

Participating in challenges ala Project Euler
They're fun, but they teach problem solving, and the truth is most of the problems I solve as a professional programmer aren't hard. What is hard is writing code so that other people can understand and change it later, adapting the code base to accommodate new features/constraints, managing releases, etc.

Taking part in programming competitions
Again, they aim to teach you problem solving (not engineering). In fact, the time limit almost prohibits you from submitting a well-engineered solution. You also rarely get credit for it. So, same problem as above, only worse.

What worked for me


The way I learned the most in the shortest amount of time is I did pair programming for 8 hours a day with people who were better than me. They were smarter, faster, and more experienced. At first I couldn't even follow what we were doing exactly. It took close to two months before I stopped feeling like I'm dragging the other person down, but from then on I became very productive very quickly. By month five, coding was the least challenging part of my job, which is where you want to be: programming should be your refuge, your creative outlet; building a career should be your challenge.

So, I suggest you give pairing a try. If you pair with world-class coders, you'll become one too, but really, anyone who's better than you would do (at least in the beginning).

If you don't know anyone or are too afraid to ask, please get in touch (@lyudmilangelov on Twitter). I'm not "world class" but I get stuff done and I get paid for it. I'd be happy to pair with you and you might find it useful.

Profile photo for Johnny M

I once met a man who drove a modest Toyota Corolla, wore beat-up sneakers, and looked like he’d lived the same way for decades. But what really caught my attention was when he casually mentioned he was retired at 45 with more money than he could ever spend. I couldn’t help but ask, “How did you do it?”

He smiled and said, “The secret to saving money is knowing where to look for the waste—and car insurance is one of the easiest places to start.”

He then walked me through a few strategies that I’d never thought of before. Here’s what I learned:

1. Make insurance companies fight for your business

Mos

I once met a man who drove a modest Toyota Corolla, wore beat-up sneakers, and looked like he’d lived the same way for decades. But what really caught my attention was when he casually mentioned he was retired at 45 with more money than he could ever spend. I couldn’t help but ask, “How did you do it?”

He smiled and said, “The secret to saving money is knowing where to look for the waste—and car insurance is one of the easiest places to start.”

He then walked me through a few strategies that I’d never thought of before. Here’s what I learned:

1. Make insurance companies fight for your business

Most people just stick with the same insurer year after year, but that’s what the companies are counting on. This guy used tools like Coverage.com to compare rates every time his policy came up for renewal. It only took him a few minutes, and he said he’d saved hundreds each year by letting insurers compete for his business.

Click here to try Coverage.com and see how much you could save today.

2. Take advantage of safe driver programs

He mentioned that some companies reward good drivers with significant discounts. By signing up for a program that tracked his driving habits for just a month, he qualified for a lower rate. “It’s like a test where you already know the answers,” he joked.

You can find a list of insurance companies offering safe driver discounts here and start saving on your next policy.

3. Bundle your policies

He bundled his auto insurance with his home insurance and saved big. “Most companies will give you a discount if you combine your policies with them. It’s easy money,” he explained. If you haven’t bundled yet, ask your insurer what discounts they offer—or look for new ones that do.

4. Drop coverage you don’t need

He also emphasized reassessing coverage every year. If your car isn’t worth much anymore, it might be time to drop collision or comprehensive coverage. “You shouldn’t be paying more to insure the car than it’s worth,” he said.

5. Look for hidden fees or overpriced add-ons

One of his final tips was to avoid extras like roadside assistance, which can often be purchased elsewhere for less. “It’s those little fees you don’t think about that add up,” he warned.

The Secret? Stop Overpaying

The real “secret” isn’t about cutting corners—it’s about being proactive. Car insurance companies are counting on you to stay complacent, but with tools like Coverage.com and a little effort, you can make sure you’re only paying for what you need—and saving hundreds in the process.

If you’re ready to start saving, take a moment to:

Saving money on auto insurance doesn’t have to be complicated—you just have to know where to look. If you'd like to support my work, feel free to use the links in this post—they help me continue creating valuable content.

Profile photo for Nathan Doromal

Let me tell you about myself. I started programming when I was 8. When I was 9, I was working on games that would take me a year to finish. I got an undergrad and a masters in Computer Science. I then started working in the trading industry where I worked alongside C++ guys with 10+ years of experience. I designed my own trading platform. I scratched it and re-designed it at least 3 more times. The last time it was good enough to be bought by a medium sized financial services firm. Since then I've worked on large C++ systems at a number of other prop trading firms.

All in all, I've been program

Let me tell you about myself. I started programming when I was 8. When I was 9, I was working on games that would take me a year to finish. I got an undergrad and a masters in Computer Science. I then started working in the trading industry where I worked alongside C++ guys with 10+ years of experience. I designed my own trading platform. I scratched it and re-designed it at least 3 more times. The last time it was good enough to be bought by a medium sized financial services firm. Since then I've worked on large C++ systems at a number of other prop trading firms.

All in all, I've been programming over 20 years with 10+ years of professional coding experience. I've been actively learning the entire time. Plus according to some arbitrary test metric (BrainBench), I am a C++ expert.

I'd say from where I am at now I am still 5-10 years away from being considered "world-class".

Let me tell you. There are indeed giants out there. And there is a world of difference between proficient to highly proficient to expert to world-class mastery.

But in a way "ignorance is bliss" and not knowing how long the path can be a good thing in that it makes you unafraid to start.

Work as hard as you can and learn as much as you can (because to tell the truth not everyone really does) and you will be surprised by the results.

Profile photo for Juan Cano

Three years is more than enough to moderately excel in programming. As any skill, you will need lots of experience to truly excel in programming (some say 10,000 hours, about 5 years on a full time job) but in just one year you can create a really good piece of software and in three years you could be talking in code.

Don't forget to ask during the whole process, places like StackOverflow are designed for this if you cannot find some specific community for your interests or if later on you are participating in a project that doesn't have a space for discussion (this rarely happens). And answer

Three years is more than enough to moderately excel in programming. As any skill, you will need lots of experience to truly excel in programming (some say 10,000 hours, about 5 years on a full time job) but in just one year you can create a really good piece of software and in three years you could be talking in code.

Don't forget to ask during the whole process, places like StackOverflow are designed for this if you cannot find some specific community for your interests or if later on you are participating in a project that doesn't have a space for discussion (this rarely happens). And answer other people's questions anytime you can, you can learn by teaching.

Leaving qualifications aside and focusing on knowledge itself (you will need qualifications for some jobs), the path to be a programmer is all made of code. You will have to write a lot of it.

You should start with some quick introductions to programming in general, to get a glimpse of what programming actually looks like and to be able to decide on a small project you can do easily (like a ToDo list or some text-based adventure game). Make it simple, don't try to build your own company or open source project before learning the basics.

With that project in mind, learn your first language. I would recommend Python, but most common, modern languages will do. Try to avoid languages that are too domain-specific or use a paradigm that is not the usual imperative or object oriented, languages like Matlab, LISP, Prolog or ML. These languages can be interesting to learn later on but now you should focus on a language that will open the doors to almost any project.

As you learn the language, try to think of how what you are learning can be used in your project and implement small parts or rough versions of the project while you are learning. This is the key part of learning a skill, finding ways of applying what you are learning.

When you learn the basics of the language (forget efficiency, best practices and advanced topics for now) and you are able to finish your small project, think of some other project, a little bit more difficult, you can work on. Maybe an extension of your first project. If it was a text-based adventure think of using a database for storing the story or how you could introduce some very rudimentary visual elements, for example.

You may want to learn a specific technology at this point, like web development, desktop applications, Android, iPhone or Arduino. This is the moment to do it but don't go too crazy. These technologies have lots and lots of features you can learn and there will be time for that. Right now focus on building simple things. Maybe a form based app for the web, like a quiz game with some front-end/back-end action, or a soundboard for Android. Something simple you can do with very basic knowledge.

This two steps should take no more than 4 or 5 months full-time. Depending on how much effort you put on this and how small your small project is, you could finish in 2-3 months. You now know the basics of programming, including some hands-on experience with current technologies, and you should have a good understanding of how a small programming project is done.

Something I always recommend when you achieve this level is to start participating in some OSS project. Pick one you like and try to get into it. You may have to learn a new language but after the first language it's easy to pick up a new language. Try to find a bug on their tracker you think may be easy to solve and go for it. This can take you some time, it's not something you do in an evening, sometimes not even in 2 or 3 months, because you have to learn how the program you are fixing works, including the building system and the flow, but it's something that will teach you how to work on a big project and you will read a lot of code written by other people and reviewed by many others.

If you don't like OSS or you can't find a project you are really interested in, try to think of a big project you can do in 6 months (including learning technologies you don't know).

By now, the end of your first year, you should have a lot of experience programming and should be able to write a piece of software of moderate to high quality. The following 2 years you should work on deepening your knowledge of computers and programming.

Try to learn algorithms, although all of them are implemented in the libraries you use and hardly ever you will need to reimplement them it will give you a notion of efficiency, will help you become more analytical and will improve your way of dealing with abstract problems and structures.

Learn best practices for the language or technologies you like or use the most, learn patterns (but, in my opinion, don't waste to much time on them) and tricks and advanced topics. This will make your programming more efficient in general and will help you identify problems with your code.

Learn the underlying principles of your technology, like TCP/IP for network development, system calls for OS development, maths (at least discrete maths) for almost any development, as well as processes and threads. You may never need to deal with these directly but you will know better how your programs work.

Something many people forget when explaining how to learn programming is that, at some point, you will need to learn how to develop a programming project, from beginning to end. Even if it's a small project you're doing on your own. This includes technical skills like setting up and using a code repository (a minimum for any project) and topics like software analysis and design (what needs to be done and how it will be done), hardware/software architecture (how many servers/processes/services you will need and how they are connected), the development cycle/workflow (tools and processes you will work with everyday) and time management (so you won't end up doing a six month project in two years). You will pick up many of these from your experience, especially after collaborating in some projects, but there are some resources that will give you a better understanding.

And most importantly, in these two years code, code, code (and read some code frequently).

Profile photo for Quora User

Here’s the thing: I wish I had known these money secrets sooner. They’ve helped so many people save hundreds, secure their family’s future, and grow their bank accounts—myself included.

And honestly? Putting them to use was way easier than I expected. I bet you can knock out at least three or four of these right now—yes, even from your phone.

Don’t wait like I did. Go ahead and start using these money secrets today!

1. Cancel Your Car Insurance

You might not even realize it, but your car insurance company is probably overcharging you. In fact, they’re kind of counting on you not noticing. Luckily,

Here’s the thing: I wish I had known these money secrets sooner. They’ve helped so many people save hundreds, secure their family’s future, and grow their bank accounts—myself included.

And honestly? Putting them to use was way easier than I expected. I bet you can knock out at least three or four of these right now—yes, even from your phone.

Don’t wait like I did. Go ahead and start using these money secrets today!

1. Cancel Your Car Insurance

You might not even realize it, but your car insurance company is probably overcharging you. In fact, they’re kind of counting on you not noticing. Luckily, this problem is easy to fix.

Don’t waste your time browsing insurance sites for a better deal. A company called Insurify shows you all your options at once — people who do this save up to $996 per year.

If you tell them a bit about yourself and your vehicle, they’ll send you personalized quotes so you can compare them and find the best one for you.

Tired of overpaying for car insurance? It takes just five minutes to compare your options with Insurify and see how much you could save on car insurance.

2. Ask This Company to Get a Big Chunk of Your Debt Forgiven

A company called National Debt Relief could convince your lenders to simply get rid of a big chunk of what you owe. No bankruptcy, no loans — you don’t even need to have good credit.

If you owe at least $10,000 in unsecured debt (credit card debt, personal loans, medical bills, etc.), National Debt Relief’s experts will build you a monthly payment plan. As your payments add up, they negotiate with your creditors to reduce the amount you owe. You then pay off the rest in a lump sum.

On average, you could become debt-free within 24 to 48 months. It takes less than a minute to sign up and see how much debt you could get rid of.

3. You Can Become a Real Estate Investor for as Little as $10

Take a look at some of the world’s wealthiest people. What do they have in common? Many invest in large private real estate deals. And here’s the thing: There’s no reason you can’t, too — for as little as $10.

An investment called the Fundrise Flagship Fund lets you get started in the world of real estate by giving you access to a low-cost, diversified portfolio of private real estate. The best part? You don’t have to be the landlord. The Flagship Fund does all the heavy lifting.

With an initial investment as low as $10, your money will be invested in the Fund, which already owns more than $1 billion worth of real estate around the country, from apartment complexes to the thriving housing rental market to larger last-mile e-commerce logistics centers.

Want to invest more? Many investors choose to invest $1,000 or more. This is a Fund that can fit any type of investor’s needs. Once invested, you can track your performance from your phone and watch as properties are acquired, improved, and operated. As properties generate cash flow, you could earn money through quarterly dividend payments. And over time, you could earn money off the potential appreciation of the properties.

So if you want to get started in the world of real-estate investing, it takes just a few minutes to sign up and create an account with the Fundrise Flagship Fund.

This is a paid advertisement. Carefully consider the investment objectives, risks, charges and expenses of the Fundrise Real Estate Fund before investing. This and other information can be found in the Fund’s prospectus. Read them carefully before investing.

4. Earn Up to $50 this Month By Answering Survey Questions About the News — It’s Anonymous

The news is a heated subject these days. It’s hard not to have an opinion on it.

Good news: A website called YouGov will pay you up to $50 or more this month just to answer survey questions about politics, the economy, and other hot news topics.

Plus, it’s totally anonymous, so no one will judge you for that hot take.

When you take a quick survey (some are less than three minutes), you’ll earn points you can exchange for up to $50 in cash or gift cards to places like Walmart and Amazon. Plus, Penny Hoarder readers will get an extra 500 points for registering and another 1,000 points after completing their first survey.

It takes just a few minutes to sign up and take your first survey, and you’ll receive your points immediately.

5. Stop Paying Your Credit Card Company

If you have credit card debt, you know. The anxiety, the interest rates, the fear you’re never going to escape… but a website called AmONE wants to help.

If you owe your credit card companies $100,000 or less, AmONE will match you with a low-interest loan you can use to pay off every single one of your balances.

The benefit? You’ll be left with one bill to pay each month. And because personal loans have lower interest rates (AmONE rates start at 6.40% APR), you’ll get out of debt that much faster.

It takes less than a minute and just 10 questions to see what loans you qualify for.

6. Earn Up to $225 This Month Playing Games on Your Phone

Ever wish you could get paid just for messing around with your phone? Guess what? You totally can.

Swagbucks will pay you up to $225 a month just for installing and playing games on your phone. That’s it. Just download the app, pick the games you like, and get to playing. Don’t worry; they’ll give you plenty of games to choose from every day so you won’t get bored, and the more you play, the more you can earn.

This might sound too good to be true, but it’s already paid its users more than $429 million. You won’t get rich playing games on Swagbucks, but you could earn enough for a few grocery trips or pay a few bills every month. Not too shabby, right?

Ready to get paid while you play? Download and install the Swagbucks app today, and see how much you can earn!

Profile photo for Dima Korolev

Contrary to how people seem to be answering, I do think this is possible. And know several people who have pretty much done this.

The keys are discipline and persistence.

"Coder" is easier than "programmer" or "software engineer", because there are objective measures: programming competitions.

Go to http://topcoder.com/tc and http://codeforces.com/. Participate in ALL competitions. Dedicate 4 .. 6 hours a day practicing. Come up with a plan, like "10 easy problems per day, three mediums and one hard per week". Solve ALL the problems. Never let them hang. Develop a habit of going to bed with the f

Contrary to how people seem to be answering, I do think this is possible. And know several people who have pretty much done this.

The keys are discipline and persistence.

"Coder" is easier than "programmer" or "software engineer", because there are objective measures: programming competitions.

Go to http://topcoder.com/tc and http://codeforces.com/. Participate in ALL competitions. Dedicate 4 .. 6 hours a day practicing. Come up with a plan, like "10 easy problems per day, three mediums and one hard per week". Solve ALL the problems. Never let them hang. Develop a habit of going to bed with the feeling of accomplishment.

Ask on the forums if you are stuck; make it a habit to practice asking good questions as well.

Read other people's code. Learn from it relentlessly!

Use some external tricks to help your self-discipline. Start a blog or Twitter and write one important thing you have learned per day. Express it in a way that makes it clear that the thing is big and you have really understood it.

I have yet to see someone who would follow a plan as ambitious as above and not excel in becoming an great coder within three years. Some people who went this route and "failed" ended up accepting interesting and well-paid job offers instead -- which is not a bad alternative either.

Good luck!
Dima

Profile photo for Alec Wilson

You say you are new — so of course you have trouble making complex programs. You can't run before you can walk!

Think of something you want to make.

Now change your idea to make it as simple as possible.

Done that? Good — now go back over it and make it even simpler.

Actually create your simple program (and probably find it to be not so simple).

Now add a little bit onto your program to extend what it does.

Do that again, and again, and again…

You eventually end up with the complex program you initially thought of.

As you learn more, you can do this process faster and you find things that you would do

You say you are new — so of course you have trouble making complex programs. You can't run before you can walk!

Think of something you want to make.

Now change your idea to make it as simple as possible.

Done that? Good — now go back over it and make it even simpler.

Actually create your simple program (and probably find it to be not so simple).

Now add a little bit onto your program to extend what it does.

Do that again, and again, and again…

You eventually end up with the complex program you initially thought of.

As you learn more, you can do this process faster and you find things that you would do differently next time as your knowledge and experience increases.

Profile photo for Metis Chan

With today’s modern day tools there can be an overwhelming amount of tools to choose from to build your own website. It’s important to keep in mind these considerations when deciding on which is the right fit for you including ease of use, SEO controls, high performance hosting, flexible content management tools and scalability. Webflow allows you to build with the power of code — without writing any.

You can take control of HTML5, CSS3, and JavaScript in a completely visual canvas — and let Webflow translate your design into clean, semantic code that’s ready to publish to the web, or hand off

With today’s modern day tools there can be an overwhelming amount of tools to choose from to build your own website. It’s important to keep in mind these considerations when deciding on which is the right fit for you including ease of use, SEO controls, high performance hosting, flexible content management tools and scalability. Webflow allows you to build with the power of code — without writing any.

You can take control of HTML5, CSS3, and JavaScript in a completely visual canvas — and let Webflow translate your design into clean, semantic code that’s ready to publish to the web, or hand off to developers.

If you prefer more customization you can also expand the power of Webflow by adding custom code on the page, in the <head>, or before the </head> of any page.

Get started for free today!

Trusted by over 60,000+ freelancers and agencies, explore Webflow features including:

  • Designer: The power of CSS, HTML, and Javascript in a visual canvas.
  • CMS: Define your own content structure, and design with real data.
  • Interactions: Build websites interactions and animations visually.
  • SEO: Optimize your website with controls, hosting and flexible tools.
  • Hosting: Set up lightning-fast managed hosting in just a few clicks.
  • Grid: Build smart, responsive, CSS grid-powered layouts in Webflow visually.

Discover why our global customers love and use Webflow.com | Create a custom website.

Profile photo for Luke Adlam

I think this is quite an interesting question, because you've specifically asked how to be a 'world-class coder' instead of just asking how to be a good programmer.

How will you quantify this goal? What do you consider "world-class"? Is it being well ranked by competitions like topcoder, as Dima Korolev suggested below? If that's the case, consider this:

Being well ranked at solving well-defined, small scale and obscure problems does not necessarily make you a good coder. It makes you a clever coder, beyond doubt, but programming is about fitting pieces together to solve a larger problem. In the

I think this is quite an interesting question, because you've specifically asked how to be a 'world-class coder' instead of just asking how to be a good programmer.

How will you quantify this goal? What do you consider "world-class"? Is it being well ranked by competitions like topcoder, as Dima Korolev suggested below? If that's the case, consider this:

Being well ranked at solving well-defined, small scale and obscure problems does not necessarily make you a good coder. It makes you a clever coder, beyond doubt, but programming is about fitting pieces together to solve a larger problem. In the real world, you need to work towards a bigger picture, and often fit your solution in with a larger system that already exists. In this environment, the challenges are quite different to outright competitions.

So, can you achieve a good "ranking" within 3 years? I'd say so, yes. You can focus on a single language, and learn lots of clever little tricks that might not necessarily work if you had to actually use them in a production environment.

On the flip side, do you want to be a renowned programmer that writes elegant solutions for difficult problems, and is head-hunted by startups and global giants alike?
I say in all likelihood, no. Programming is about your problem solving ability, and while some people are just naturally better at it than others, it's still an acquired skill; the more problems you solve, the better you become. While you can accomplish a lot in 3 years, there are smarter people out there (I'm not insulting your intelligence here, there are just a lot of very clever people in the world) that have a whole lot more practice than you.

Ok, so how DO you become a great programmer? Of course, this is just my opinion, but here we go:

  1. As I mentioned programming is about problem solving, so surround yourself with problems. The bigger the better. At first, they all seem intimidating, but once broken down they will seem a lot easier.
  2. Surround yourself with smart people. I don't just mean programmers, anyone will do. Two things will happen, firstly they'll offer insight and solutions you never would have considered yourself, but they'll also humble you and force you to keep learning. When you're a sole programmer in a basement somewhere, it's easy to become arrogant and assume you have all the answers.
  3. Expose yourself to as many languages as you can. Don't sit back and say "C++ or Java are the best languages out there, so I'll exclusively use them." - every language has it's own intricacies, which you can exploit to your advantage. After exposure to enough, you'll have a big stockpile of cleverness.
  4. Don't get complacent. After a couple of years, you'll have built up a knowledgebank of cookie-cutter solutions to common problems. These aren't necessarily the only or best ways to solve the problem. Always be open to new methods and ideas!
  5. Work in a team. This is similar to 2. Every programmer has a unique perspective (and also a strong opinion!) after years of coding, and you should use these to expand your own perspective.


None of these things guarantee success. If you want to be a great programmer, you're going to need a measure of natural problem-solving ability. In my (admittedly fairly short) career, those that don't have a good grasp on problem-solving make bad programmers, and don't improve.

I think the first thing you need to do though, is decide whether you want to be a highly ranked, or highly regarded programmer. If you don't pick one, I don't think you'll be either...

Profile photo for Scott Anthony Lawrence

I'm not sure what the term "world-class coder" means to you. But I would actively discourage the notion that there is some point you can reach in the practice of software development (whether it's 3 years or 20 years) where you can look at yourself and say "Achievement unlocked! I am a world-class coder at last." What may give you more satisfaction over time than the question of "where do I rank" in some mythical best coders on Earth list is "Am I a better developer now than I was last week? Last month? Last year?"

The things that previous commenters have suggested are great ideas for conti

I'm not sure what the term "world-class coder" means to you. But I would actively discourage the notion that there is some point you can reach in the practice of software development (whether it's 3 years or 20 years) where you can look at yourself and say "Achievement unlocked! I am a world-class coder at last." What may give you more satisfaction over time than the question of "where do I rank" in some mythical best coders on Earth list is "Am I a better developer now than I was last week? Last month? Last year?"

The things that previous commenters have suggested are great ideas for continuous improvement and refinement of your skills in programming. Do as many of those things as you can. Beyond those, I'd suggest the following:

  • Be willing to learn from anyone. I've made my living writing software since 1996 and I regularly learn new things about my craft from people a decade or more younger than me.
  • Keep track of what you learn--and share it. Whether it's through blogging, Stack Overflow contributions, or something else--write about it. You may not encounter the exact problems you've solved in the future, but they will often be close enough that what you've captured will help you solve them much faster than you would have otherwise. The ability to explain what you know to others is a very valuable and rare one. The process of preparing to give a presentation to others on a topic has often been a good forcing function for me to learn that topic to the level where I can explain it well.
  • Learn about subjects beyond programming. The importance of the ability to understand new domains well enough and deeply enough to design and implement useful software for them cannot be overstated. I've delivered software solutions for news organizations, healthcare companies, marketing companies and defense/intelligence contractors in my career so far. Making myself familiar with the sort of terminology they use and the way such companies operate (above and beyond a specific project) definitely results in a better end product. One or more such topics can end up being great fodder for pet projects (which are great vehicles for learning things you aren't already learning in a job).
Profile photo for Hari K

Have a proper plan for coding plan. This is what i suggest to many students and interns who approach me, here is the same for you for this wonderful question.

Phase 1: Cover the basics in first 3 months. that means, you should be expert in following (use C/C++ for this, no object oriented design at this phase).

    1. Basic Data structures,
    2. Conditional statements
    3. Loops
    4. Arrays
    5. Functions
      1. Pass by value
      2. Pass by references
      3. Calling conventions for Unix and Linux.
    6. Pointers & references
    7. Storage Classes
    8. Structures and classes

By end of this phase you should be comfortably coding all basic problems of coding .

Phase 2: This

Have a proper plan for coding plan. This is what i suggest to many students and interns who approach me, here is the same for you for this wonderful question.

Phase 1: Cover the basics in first 3 months. that means, you should be expert in following (use C/C++ for this, no object oriented design at this phase).

    1. Basic Data structures,
    2. Conditional statements
    3. Loops
    4. Arrays
    5. Functions
      1. Pass by value
      2. Pass by references
      3. Calling conventions for Unix and Linux.
    6. Pointers & references
    7. Storage Classes
    8. Structures and classes

By end of this phase you should be comfortably coding all basic problems of coding .

Phase 2: This is for 6 months, you should do following

    1. Searching algorithms
    2. Sorting algorithms
    3. Matrix multiplications
    4. CLI programs (menu style interactions )
    5. introduction to Object oriented programming
    6. Dynamic allocation
    7. Polymorphism
    8. Inheritance
    9. Associations bet ween classes
    10. Basic Data Structures
      1. Linked Lists
      2. Queues
      3. Stacks
      4. Circular queues

You will start intermediate level here , 9 Months Elapsed

Phase 3: This is for 3 months, you should do following.

  1. Trees and Tree Traversal
  2. Expression Evaluation.

Phase 4: This is for 6 months, you should do following.

  1. Graphs
  2. Dynamic Programming
    1. Knapsack algorithms
    2. Greedy algorithms
    3. Broote force algorithms
    4. back tracking algorithms.

You just crossed intermediate level here 18 Months elapsed ….

Phase 5: This is for 6 months, you should do following.

  1. Multi threading problems practice
  2. Socket programming
  3. Introduction to communication protocols
    1. HTTP communication
    2. HTTPS
    3. REST
    4. SOAP
    5. Web services

Phase 6: This is for 6 months, you should do following.

  1. Learn one/two professional application platforms
    1. J2EE
    2. .NET /web programming world
    3. any other of your choice
  2. Cloud computing platform
  3. Software processes
  4. Machine learning

30 Months elapsed!!! you are by now, almost close to be an expert, not just experienced.

Te next 6 Months, please spend in making a real industrial project, i would suggest to work with a nice startup to understand peripherals which can’t be learnt by academics…

I am sure you will be a Master Coder/ software engineer at the end of 3rd year.

Profile photo for Damien Filiatrault

Truly great programmers are rare, but they do have many characteristics in common. Knowing what those characteristics are can help you achieve your goal. I'm familiar with this topics because I run Scalable Path, a freelancer marketplace and after working with over 5,000 developers, I have spotted the attributes I believe many of the best devs have in common.

Positive Attitude:

A great programmer cares about your product. They are positive, willing to go the distance to get the job done and bring their best every day. Although it’s important not to exhaust a developer with frequent urgent deadli

Truly great programmers are rare, but they do have many characteristics in common. Knowing what those characteristics are can help you achieve your goal. I'm familiar with this topics because I run Scalable Path, a freelancer marketplace and after working with over 5,000 developers, I have spotted the attributes I believe many of the best devs have in common.

Positive Attitude:

A great programmer cares about your product. They are positive, willing to go the distance to get the job done and bring their best every day. Although it’s important not to exhaust a developer with frequent urgent deadlines, sometimes this is unavoidable. When you need to bring a product to market or need to ship a certain feature out by the deadline, the great programmer will step up and get the product released whenever possible.

Because they care.

A great developer doesn’t let their ego get in the way of taking feedback.

Communications Skills:

Good communication skills directly correlate with good development skills. A great developer is able to understand problems clearly, break them down into hypotheses and propose solutions in a coherent manner. They understand concepts quickly, or ask the right questions to understand, and don’t need to have everything written down in a specifications document. Great offshore developers usually speak multiple languages coherently and are very comfortable with documentation in English. In the world of technology, English is the de facto language of most documentation and developer interactions. If they don’t speak it well enough, they’ll require interpreters and translators, making their knowledge second hand, and quickly outdated.

Time Management:

Great developers are highly reliable. They have a strong work ethic and show up at meetings on time. An important skill is the ability to estimate the amount of time needed to complete a task, communicating this and delivering on it. Exceptional developers are great at managing their clients or leaders instead of you managing them.

Learning Ability:

Great developers are usually amazing self-learners. They have the ability to learn new technologies on their own and aren’t intimidated by new technologies. They have the ability to pull disparate bits of information and process information on the fly. Every programmer will experience a situation where he or she doesn’t know the answer. Great programmers will find different resources, talk to the right people and find the solution no matter what. The best skill anyone can have is knowing how to learn, and great developers have mastered the skill of self-learning.

There is a clear link between the most talented developers and those that are always learning. Our best and highest paid developers often spend at least 25% of their time working on personal projects and testing new frameworks.

Deep Knowledge:

Great developers have worked with a handful of technologies long enough to become experts and are competent with many. They will hit the ground running because they already know the right technologies. They will follow coding standards and will write code that is understandable and commented where necessary and can be passed on to someone else easily. By combining their cognitive abilities and diverse industry experience, they’re able to arrive at optimal solutions quickly. An experienced developer is well versed in best practices like agile development, task management software (Jira, Trello, etc.), version control (If they know Git, it’s a sign they’ve moved on past older systems like SVN), and working in different environments (local development environment, and working knowledge of deploying applications) so ask them about these things.

Team Player:

Another superb quality of premium developers is their ability to help other developers get better. They offer teammates help when they are stuck, teach new skills to others and write documentation that would help teammates not only in their organisation but the developer community in general.

People that behave like a black box are not good team players.

Passionate:

I have noticed that when someone is passionate about their work they are also likely very good at it.

Aspire to these characteristics and you will be well on the way to your goal!

Profile photo for Ewan Valentine

I've been a programmer about 2 years and I'm at a pretty high level. In another year... Who knows.

There's really no quick win, you have to immerse yourself every single day. I code all day at work, I go home and I carry on till 2am.

You have to have a passion for it, so deep that you're completely unaware of your surroundings when you get into it. You have to feel excited and obsessed. Without that, you will struggle.

The best way, if you have the above passion is to take on projects, freelance, collaborative or otherwise. Real life projects teach you how to deal with sets of problems and the

I've been a programmer about 2 years and I'm at a pretty high level. In another year... Who knows.

There's really no quick win, you have to immerse yourself every single day. I code all day at work, I go home and I carry on till 2am.

You have to have a passion for it, so deep that you're completely unaware of your surroundings when you get into it. You have to feel excited and obsessed. Without that, you will struggle.

The best way, if you have the above passion is to take on projects, freelance, collaborative or otherwise. Real life projects teach you how to deal with sets of problems and the bigger picture and not just the syntax.

Profile photo for Anonymous
Anonymous

What you need first is go, get a job. I get my first and current job at 17th when I done my 10th (Yes). It's start very slowly. I start writing from Html, CSS, JavaScript to C#. Currently I write application in C# for Web-application and Desktop application.

You need a lot of experience for become a World class programmer. Don't try to compare yourself with every other programmer, You never can become master of language that everyone else use (people who you compare yourself with).

Follow new thing everyday and practice old thing that you already know. Make a strong background in specific lang

What you need first is go, get a job. I get my first and current job at 17th when I done my 10th (Yes). It's start very slowly. I start writing from Html, CSS, JavaScript to C#. Currently I write application in C# for Web-application and Desktop application.

You need a lot of experience for become a World class programmer. Don't try to compare yourself with every other programmer, You never can become master of language that everyone else use (people who you compare yourself with).

Follow new thing everyday and practice old thing that you already know. Make a strong background in specific language. Maybe you are not working in Forbes 500 company but you can get much more experience by self-discipline and learn how to learn....

Profile photo for Alan Mellor

You won't.

You won't even get close.

You might, if you apply yourself, become a competent entry level developer.

But even for that. You need to rid your mind of quick fix thinking.

There is a lot to learn, a lot of code you must write, and all of it is difficult at first. You will need tenacity to stick through the tough times, as this journey is long haul.

I am not 'world class', there is too much I have still to learn.

I've been doing this 37 years.

But think of it this way. Everyday you delay starting puts your goal one day further into the future.

Fire up that laptop and get to work.

Profile photo for Quora User

If you could become a world class coder in 3 years by doing XYZ, what would happen if you kept doing XYZ for 20 years?

I'm sorry it doesn't work that way.
I have been programming for decades I'm nowhere close to world class. There's not a single day that goes by, in which I do not think about programming. For 13 years of my life now, I have programmed almost daily to earn a living, and yet I have improved only slowly.

Things take time. If you started at age 12, you will be pretty good by 18. After you mature, it does taper off, because you have to work for a living, and commercial programming i

If you could become a world class coder in 3 years by doing XYZ, what would happen if you kept doing XYZ for 20 years?

I'm sorry it doesn't work that way.
I have been programming for decades I'm nowhere close to world class. There's not a single day that goes by, in which I do not think about programming. For 13 years of my life now, I have programmed almost daily to earn a living, and yet I have improved only slowly.

Things take time. If you started at age 12, you will be pretty good by 18. After you mature, it does taper off, because you have to work for a living, and commercial programming is not always rocket science, you're more like a person who assembles furniture from pre-existing parts.

Set more moderate goals.
In 3 years you should possibly be able to reach a ranking of 2500 to 3000 on topcoder and hold it for each SRM.

Profile photo for Emin İlker Çetinbaş
  • Choose a target first. (Web, Mobile Apps, Games, Databases, Embedded ...etc) Avoid platform development. Use an available game engine. Start with off the shelf database tools. For embedded development, start with Arduino, for example. Platform development requires a great deal of expertise and experience, and teams with huge budgets.
  • Choose the target you are more inclined on. (Mine was 2D games for mobile platforms) Start a project on that particular platform.
  • Make sure you learn the language of choice & development tools that most folks use in that particular target. Do not hesitate to use th
  • Choose a target first. (Web, Mobile Apps, Games, Databases, Embedded ...etc) Avoid platform development. Use an available game engine. Start with off the shelf database tools. For embedded development, start with Arduino, for example. Platform development requires a great deal of expertise and experience, and teams with huge budgets.
  • Choose the target you are more inclined on. (Mine was 2D games for mobile platforms) Start a project on that particular platform.
  • Make sure you learn the language of choice & development tools that most folks use in that particular target. Do not hesitate to use the most popular stuff. You may think that Java is the coolest think ever but if you are into iOS games, for example, you will go with Objective-C and XCode.
  • Always aim for a usable release. If you are building a robot, or a blog engine, make sure it works for others as well as you.
  • Resist to urge to restart the project every time you realize your code is not so great.
  • Work on one project at a time. If you have another idea for a project, write it down and forget about it for a while.
  • Make releases as often as you can. If you have another idea for a great feature, write it down and move on.
  • Follow blogs and forums for that particular target. Read books. Lot's of them. Ask advice on forums for reading material.
  • Try to extend open source tools, libraries ...etc to complete a functionality for your projects or customize them to suit your needs.
  • Never come to a conclusion that you are a world class coder, otherwise you will lose your desire to learn.
Profile photo for Mike Ciaraldi

Here’s how I did it (and, yes, I consider myself pretty awesome at designing and implementing software systems. Not Linus Torvalds or Richard Stallman awesome, but not too shabby :-) ):

  • Lots of practice. This is like the way that years of practice puts you in the state where you do not have to think about each individual finger position while playing a musical instrument. Once you know what you want a piece of code to do, the code just seems to flow out of your fingertips onto the keyboard.
  • Learn about different programming languages, different kinds of languages, and different operating systems

Here’s how I did it (and, yes, I consider myself pretty awesome at designing and implementing software systems. Not Linus Torvalds or Richard Stallman awesome, but not too shabby :-) ):

  • Lots of practice. This is like the way that years of practice puts you in the state where you do not have to think about each individual finger position while playing a musical instrument. Once you know what you want a piece of code to do, the code just seems to flow out of your fingertips onto the keyboard.
  • Learn about different programming languages, different kinds of languages, and different operating systems. Each causes you to look at a problem and its solution in a different way. This will help you choose the best tools for each project.
  • Study the foundations of computer science: how hardware works, how a compiler does its job, how different algorithms work. Learn how to analyze an algorithm in terms of how much time, memory, and I/O access it will require, as a function of the size of the problem; this may tell you if your approach is even practical. Do you know what “NP Complete” means? You should.
  • Remember that you should not be just a “coder.” You design and implement a complete system or part of a system. Often, proper design is more important than the program itself.
  • Understand the importance of proper documentation. This is probably the single most important thing which beginners do not realize. If you do not know what the program is supposed to accomplish and how it is supposed to work, how will you ever write it correctly? And if you do not write that down, how will you or anyone else know in the future?
  • Think before you code! Decide what you want a function to do, write a header comment for it, and only then write the code to implement it. If you realize that this is not what is needed, update the comment.
  • Despite what I just wrote, do not be afraid to write a quick-and-dirty program that you will throw away. This is especially true if you are trying to figure out how a particular language feature or function works.
  • Learn to use tools such as Doxygen, Valgrind, and a debugger.
  • Learn to analyze systems: What is the problem being solved? How does it need to interact with other mechanical, computerized, and human systems? Sometimes you have to tell a client: “You are trying to solve the wrong problem.”
  • Read books and journals. Join a professional society such as ACM or IEEE-CS, and attend their meetings and workshops.
Profile photo for Padam J. Singh

Have good understanding of the following:

  1. Latency numbers. This tells you the relative time between a cache hit and miss, disk read etc.
  2. CPU architecture. See how multiple cpus, multiple cpu cores, multiple hardware threads affect your program and how your program needs to make use of these. Also understand NUMA architecture.
  3. OS fundamentals like file system caches, page faults, memory swap, process concepts.


Now you understand the systems on top of which your program runs, you should have excellent understanding of :

  1. Algorithms, their complexity and best use cases.
  2. Avoid writing any standard

Have good understanding of the following:

  1. Latency numbers. This tells you the relative time between a cache hit and miss, disk read etc.
  2. CPU architecture. See how multiple cpus, multiple cpu cores, multiple hardware threads affect your program and how your program needs to make use of these. Also understand NUMA architecture.
  3. OS fundamentals like file system caches, page faults, memory swap, process concepts.


Now you understand the systems on top of which your program runs, you should have excellent understanding of :

  1. Algorithms, their complexity and best use cases.
  2. Avoid writing any standard function from scratch. There are tons of libraries, headers available which have already done the standardisation so don't bother writing one from scratch.
  3. Try keeping the business logic and system logic separate. For example today embedding code in php files is considered unmaintainble. Hence implementation your logic in classes and call those from the php html.
  4. Write neat, maintainable, documented code.
  5. Understand code versioning system like Git and svn.


Rest of the "best" will depend upon the programming language and domain of what you are working in. I would however suggest that you master at least one compiled code language and at least one dynamic high level language.

Profile photo for Quora User

First I'm going to give kudos to Michael O. Church for defining what a "great coder" is in a more rigorous fashion. I agree with him on most of his points and think his model has promise as an HR tool (he will probably hate me for saying this).

Programming is like any other human activity - there are going to be child prodigies on the extreme right of the bell curve, there are going to be people of average ability, and there are going to be people on the far left. I believe the only people who are unable to reach a level of programming competency are those with mental handicaps, which prevent t

First I'm going to give kudos to Michael O. Church for defining what a "great coder" is in a more rigorous fashion. I agree with him on most of his points and think his model has promise as an HR tool (he will probably hate me for saying this).

Programming is like any other human activity - there are going to be child prodigies on the extreme right of the bell curve, there are going to be people of average ability, and there are going to be people on the far left. I believe the only people who are unable to reach a level of programming competency are those with mental handicaps, which prevent them from competency in most kinds of human intellectual activity.

So, assuming you have average cognitive abilities, can you become a great coder? An obvious necessary requirement to becoming great at something is to first acquire basic competency.

Jeff Schaffzin has a very good observation about having a background in logic. The core activity of computer programming involves having mental models of your programming language and of the problem you are trying to solve. This is why Seymour Papert was so successful in applying Piaget's constructivism theory of learning to teaching children how to code: help children construct mental models by having them build and tinker with computer programs (http://en.wikipedia.org/wiki/Constructionist_learning).

IMO, this is why most CS programs that start out teaching Java or C++ fail. Those programming languages are useless for tinkering and exploration. The only students that pass the course are those that come in already having mental models that are related to programming. The other students don't get a chance to develop those mental models and are told they don't "get" programming.

Two other prominent programs in the constructivist programming learning camp are those run by Alan Kay, and the PLT TeachScheme! project (now known as ProgramByDesign).

My first real introduction to programming (aside from keying in some BASIC programs without knowing what I was doing as a child) was through a high school introductory CS class that was part of the TeachScheme! project (Mike Zamansky's class at Stuyvesant). By the end of it I could write computer programs that solved basic problems. However, I had no interest in programming, and would not develop an interest for several years.

This is where the journey to greatness starts: with motivation. My motivation came when I discovered SICP and learned that programming can be logically simple and beautiful.

I'm not going to claim to be a great coder, or even an excellent one, but I will explain the tactics I am using in my plan to get there.

Since we are talking about ways to do something, having a good process for doing things helps. I recommend reading George Leonard's book Mastery. I found the most important points of the book to be:

1. To become great at doing something, you need to practice at doing that thing.
2. Practice is most effective if done regularly and consistently.
3. Fundamentals are everything. The greatest achievers are ones that pay the most attention to perfecting the fundamentals.
4. A great practitioner never stops learning. As soon as you become complacent with your present competency, you have slid into mediocrity.

Years after starting out on the path to becoming a great coder, I lost my motivation to improve. I thought I was good enough and there wasn't any point in trying to get better. I found other interests in business and psychology. I even decided to try to pursue a career in business and enrolled in an MBA program. That's when I discovered Leonard's book and realized I had failed.

I dropped out of business school this May with a renewed motivation to become great and a very different perspective on things. I evaluated my approach to see which things I had done wrong and which things I had done right:

Things I did wrong:
1. Not paying attention to regular and consistent practice
2. Thinking I was good enough at the fundamentals
3. Not being competitive enough
4. Not learning enough mathematics

To address point 1, I am employing the "Seinfeld technique" - I try to do at least one task related to any of the Free Software projects I am involved in every day. I find that the best way to do that is to employ the "Hemingway technique" - leave a task or subtrask unfinished at the end of the day. That way it's easier to make a contribution tomorrow.

Point 2 I am addressing by going back and re-learning fundamental data structures and the algorithms on them, by taking my time to read introductory materials that should be "too basic" for me, by re-learning the basics of areas of CS that I don't specialize in.

I am also simplifying my programming style. Everyone agrees that simple is good, but now whenever I encounter the need to make a decision about the design of my code, I ask myself (taking a cue from Mastery): what is the stupidest thing I can do? I find myself being too clever when I'm trying to be simple. Force yourself to be stupid and you can only come up with simple solutions.

The pretending-to-be-stupid exercise has also lead me to abandon any vestiges of ties to programming paradigms or proscriptions. I now more than ever write code that by popular "wisdom" and dogma should be terrible, but ends up being simpler to understand. I used to think functional programming was better than object-oriented programming. I now think they're both terrible.

Point 3 is something new for me, but should have been obvious. After all, the whole idea of "great coder" is relative - you can only be out X sigmas on the bell curve if there are other people to compare yourself to. I've never been particularly interested in programming contests before - I've only ever done two, the last one for the 2007 International Lisp Conference. Right now I'm planning to start doing TopCoder competitions once I have cleared some of the other planned tasks. I'm not sure how long it's going to take me to get good, but I think I'll be ok (my ILC07 entry dominated with the highest score and lowest runtime).

Point 4 should be obvious. One of my bachelor degrees is in pure mathematics, and I think there are only two things I did not do enough of in college: sex and mathematics.

Things I did and continue to do right:
1. Learn from the best materials
2. Learn from the most materials
3. Taking time to do ambitious projects

1. Niels Abel has said that the key to his progress was to study "the masters, not their pupils."

I am a big fan of the MIT computer science cirriculum. I think the three best books in CS are Abelson and Sussman and Sussman's Structure and Interpretation of Computer Programs, Cormen, Leiserson, Rivest and Stein's Introduction to Algorithms, and Saltzer and Kaashoek's Principles of Computer System Design.

The great computer science books, papers, and dissertations from the 1950s, 60s, 70s, and 80s are full of insight that is not and will never be outdated. During college, I made it a point to read CS books mostly published before 1990. One of the tasks of the current plan is to read all four volumes of TAOCP in their entirety.

2. This might seem to contradict the above point, but once you understand what is important and what is not, you learn how to evaluate any material that comes your way and either discard it or learn something from it. Unfortunately not every topic is exhaustively covered by masterful exposition.

3. This is very important. If you want to do a project and someone tells you it will be too difficult, you should do that project. If you do great projects, by definition you will become known as a great coder. Don't bother making small, simple projects your priority - in the course of doing a large project you will have to deal with enough small, simple projects that are blocking your progress that you won't need anything else.

Doing a difficult and ambitious project means the possibility of failure. One very common way to fail is to run out of time. You can remove this possibility by working on long-term Free Software projects. I literally take years for my Free Software projects. On a long enough time scale, major life changes and shifting priorities don't get in the way. If I run into a technical problem that I don't see a good solution to, I can walk away for months, and come back when a satisfactory solution has occured to me. This way, the only reason to abandon a project is that it is not important enough to spend time on.

A side-benefit to Free Software projects is that the small, simple projects blocking your progress tend to be other Free Software projects. You get to make public contributions that benefit a lot of other people, all the while doing something you love that will make you known as a great coder.

I can't say for certain that this will work, or if it's the best approach. If you have ideas, please feel free to share.

Profile photo for Simon Willison

Write code. Lots of code. Code that does stuff.

Build your own blogging engine. Next, try to design and write the One True CMS (you'll fail just like thousand of others have before you, but you'll learn lots in the process).

Build your own todo list software. Now expand it to be your own email client. Extend it to support plugins. Now invent your own scripting language for writing plugins in, and write your own interpreter for it.

Profile photo for Ethan Boswell

A simple, yet somewhat difficult approach is to make as many projects as you possibly can. Make projects in one programming language or framework until you feel quite comfortable with it, then start making projects in another language.

Whatever you can think of, make a project for it. Make a project to get weather data, to keep time, to connect to servers, to watch home media, to handle files, literally anything you can think of. Work through the projects gradually and don’t be afraid to use Stack Overflow or Quora.

Since programming is all about problem-solving, making lots of projects will tea

A simple, yet somewhat difficult approach is to make as many projects as you possibly can. Make projects in one programming language or framework until you feel quite comfortable with it, then start making projects in another language.

Whatever you can think of, make a project for it. Make a project to get weather data, to keep time, to connect to servers, to watch home media, to handle files, literally anything you can think of. Work through the projects gradually and don’t be afraid to use Stack Overflow or Quora.

Since programming is all about problem-solving, making lots of projects will teach you languages and make you a more skilled problem-solver.

Profile photo for Matthew Chaboud

Naturally, when we see a question like this, we see lots of answers like:

"Always be writing code!", "Learn to learn!", and "I started on a Babbage Difference Engine that I built from marbles and gum-drops, so you should do the same!"

Sure. Great. These are fine things, and a lot can be had early on from banging on, noodling with, and tackling problems on your own. Still, I'm going to suggest that you do two things to try to become a great coder:

  1. Stop writing code for yourself.
  2. Stop writing code.


1. Stop writing code for yourself.
The greats don't just solve coding problems. The greats creat

Naturally, when we see a question like this, we see lots of answers like:

"Always be writing code!", "Learn to learn!", and "I started on a Babbage Difference Engine that I built from marbles and gum-drops, so you should do the same!"

Sure. Great. These are fine things, and a lot can be had early on from banging on, noodling with, and tackling problems on your own. Still, I'm going to suggest that you do two things to try to become a great coder:

  1. Stop writing code for yourself.
  2. Stop writing code.


1. Stop writing code for yourself.
The greats don't just solve coding problems. The greats create tools that others can leverage to solve problems. Whether those downstream of you are in your organization or not doesn't really matter. What matters is that your code is readable, comprehensible, usable, extensible, compatible, ableible, ibleable, etc.

Middling and good programmers can create APIs, components, and frameworks that other teams can interact with on an ongoing basis, but it will typically take coordination, modification, and collaboration. Great programmers can build APIs and components, drop the mic/keyboard, walk away, and still have an impact.

Think of what a good API looks like. Interfaces self-document, allocation and resource retention semantics are coherent, threading concerns are cleanly managed and consistently expressed, etc.

What about components? Capabilities scale cleanly, integration burdens drop, interfaces allow for natural extension, problems that the component author never dreamed of can be solved concisely, etc.

Even if you're never going to share the code, write for others. Write virtuoso code. In a year, when you pull this code out of your bag of tricks to solve some other problem, it will be there, waiting for you, with a bow on it. When I was young, energetic, and writing code only for myself, I would express "false" with "5 == 3" or name all of my variables after farm animals. Needless to say, I don't do that anymore.

When all of this is done right, one coder suddenly becomes tens, hundreds, or thousands of coders in downstream efficiencies. The leveraged impact of direct application of the code is one part, but the reflections of that code in the work of others has a meaningful (though indirect) impact. Which brings me to the larger point:

2. Stop writing code.
This may seem a little counter-intuitive, but stay with me for a minute. In order to write well, we generally need to read quickly, effectively, and thoroughly. The overwhelming majority of what we do is read code. I just spent a couple of weeks reading code so I could take what was expected (by others) to be a few thousand lines of hard-to-maintain code and turn it into about 25 lines of
the right (ask me again in six months) code. When you're working in mature codebases, being able to make progress on large-scale bodies of code without introducing technical debt means being able to deeply understand what is in front of you. Wrapping your head around the whole problem in an existing codebase means reading the code in the codebase. It means that you can, for example, look at a thread-safe data structure and understand if it is lock-free, wait-free, or utterly broken. Part of this comes down to you and your fellow coders writing readable code for others (See 1.), but much of it comes down to your ability to ingest and internalize code. You do this by reading code, and you get good at reading code by reading code.

Additionally, reading is your gateway to the party tricks (and substantive methodologies) of others. When you encounter an elegant API, a clever construct, or a complete solution to a complex problem, read the code. When you find a broken hack, a set of classes painted into a corner, or an incomprehensibly complicated stack of band-aids, read the code. You'll learn about good approaches and horrible pitfalls. You'll see a little more through the eyes of the author(s), develop some sympathy for the situational choices involved, and reach beyond your own edges. When you never stop writing, you can fall into the old adage of having a hammer... every problem looks like a nail. You can get very far with a limited toolbox and a lot of effort, but you'll never be great.

I once had a very senior engineer (and mentor... and friend) at a previous company tell me that I was the best "mathematician who codes" that he knew. He is the best reader of code I've ever met, and he was leaps and bounds more valuable to the organization than I was. The most influential programmers I've worked with have all been voracious readers of code, capable of reading code like others read the morning paper.

If you want to be a great coder, you need to stop writing code long enough to start reading it.

Profile photo for Gavin M. Bell

10 Practice...
20 Be good at
RTFM...
30 Get the right tools (IMHO: scm [GIT], editor [emacs])
40 Read others source code
50 Bolster your writing and communication skills (blog, papers, help others)
60 Solve problems with code
70 Practice
80 Practice
90 GOTO 10

It's basic :-)

Profile photo for Robin Thomas

1. Do not think that the more languages you know, the better you will be.
2. Code. Code. Code! The more you do, the better you can become. Start an open source project. Or contribute to one. Perseverance is the key.
3. If you are using an IDE, make sure you become well versed in it. Customize it to yield your maximum efficiency. Learn all the keyboard shortcuts. Etch it into muscle memory.
4. Lear

1. Do not think that the more languages you know, the better you will be.
2. Code. Code. Code! The more you do, the better you can become. Start an open source project. Or contribute to one. Perseverance is the key.
3. If you are using an IDE, make sure you become well versed in it. Customize it to yield your maximum efficiency. Learn all the keyboard shortcuts. Etch it into muscle memory.
4. Learn about debugging, version control, and unit tests.
5. Solve problems for which others are willing to pay. Or build something that might be helpful for some.
6. Do not try to build an exhaustive memory of all the data structures, algorithms and syntax. It’s more about how you think, rather than what you remember.
7. ...

Profile photo for Bhashkar Sharma

My $0.02: Read a lot of code from, and contribute to open-source projects. That said, I will leave you with the advice from one of the best computer scientists: Teach Yourself Programming in Ten Years

Profile photo for Yash Bajaj
  • Write code regularly. Do not rust your coding fingers, even when you're in design phase. Make it a point that you code daily. The only way you can become a good coder is by coding more.
  • Follow best practices. If I see a badly written code which I have to review, I will rip your soul apart. Right from the choice of names for variables, methods to your low level design, consistency, performance, optimisation, scope, modularity. A basic checklist of best practices is followed by the tribe of programmers. Either follow that or modify it with a datapoint. Don't write shitty code. Respect the tribe.
  • S
  • Write code regularly. Do not rust your coding fingers, even when you're in design phase. Make it a point that you code daily. The only way you can become a good coder is by coding more.
  • Follow best practices. If I see a badly written code which I have to review, I will rip your soul apart. Right from the choice of names for variables, methods to your low level design, consistency, performance, optimisation, scope, modularity. A basic checklist of best practices is followed by the tribe of programmers. Either follow that or modify it with a datapoint. Don't write shitty code. Respect the tribe.
  • Stack Overflow, Be an ardent visitor of this website. Know how to search effectively. Do not ask a new question before analyzing the existing repository. Upvote an answer if it solves your question. Chose a best answer if you’ve asked a question. If you've found out a better solution, elucidate the same.
  • Document, a lot. This ranges from the javadocs/scaladocs at the code level to your requiremets/High level design/ Low level design/ Basic UML diagrams etc. I'm not a big fan of comments in code. Your code should be legible enough. I use them only if the logic is very complex or non intuitive.
  • Test, without any failures. Write unit tests for every testable business logic you have in your code. Don't try to hit high numbers of coverage. That's a terrible approach to testing. I can cover all the lines of code with multiple unrelated unit tests and still have a code that fails on a simple usecase. Test a business logic or any usecase you might think of which a new developer might not consider when you're in some other team 2 years later. The goal is to understand all the usecases of the code using the unit tests and if anyone who is not familiar with the codebase makes a change that was against the previous use cases, the tests should fail.
  • Learn, always. Computer Science is broad domain and there are tons of materials available online that will make you a master in no time. Broadly, you can give a shot at competitive programming, data science & open source development to begin with. These intrigue me a lot. That said, have short term and long term learning goals. It keeps you motivated. My short term goal is to become a novice in Apache Spark by September and long term goal is to learn the entire Python stack for data science and develop the habit of solving one good topcoder problem everyday by April 2018.
  • Know what you're building. This is one essential point which people forget when they get engrossed into development. Have a one pager that clearly documents the technical expectations of the product and the assumptions it makes. Get a sign off from the business folks or your clients per se. This will be useful for two reasons. Every small design change you make, you can validate your hypotheses against the document. If your client points out a bug which was against your understanding of the product, you can always rely on this document to be the ground truth. This is not the business requirements document I am speaking of. That's at high level. I am speaking of a document that should be made by the developer after the design phase when the requirements are well versed by the technical team.
  • Measure the impact of your product. Any feature or enhancements you make to the product, ask your clients about how would they measure the effectiveness of the change. What are the success measures? What kind of metrics needs to be published and tracked to rollout flawlessly? This will also help you put down a point in your resume against every project you worked on. For eg : Increased the click through rate of the ‘show recommendations’ button by 43 % by showing a pop-over of a default recommendation.

Know that Computer Science is a very tough and interesting field that needs a lot of patience and determination. You will be tired and frustrated at times and sometimes you'll be the king of the world. Oh, there's no better feeling than to learn the language of computers and speak to them, understand them and make them do what you want.

I am a 5 and a half years old programmer. My views might be niche and naive, sorry for that.

Profile photo for Leonardo Graterol

I’m gonna answer with an old musicians’ joke.

A tourist is walking in the streets of New York and asks a street musician:

-How do I get to Carnegie Hall?

To which the musician replies:

-Practice, practice, practice

I’m gonna answer with an old musicians’ joke.

A tourist is walking in the streets of New York and asks a street musician:

-How do I get to Carnegie Hall?

To which the musician replies:

-Practice, practice, practice

Profile photo for Saurav Sharma

The only thing which separates a great programmers for a mediocre ones is being genuinely curious.

While I agree that great programmers practice a lot, write a lot of code, read documentation etc however, all those things are secondary and are the result of being genuinely curious.

One of the best people I know in almost every profession are the ones who are genuinely curious about their fields.

This curiosity in turn gives them the motivation and drive to do the right things needed.

What do I mean by being genuinely curious?

There are a lot of people who get into programming just because it seems

The only thing which separates a great programmers for a mediocre ones is being genuinely curious.

While I agree that great programmers practice a lot, write a lot of code, read documentation etc however, all those things are secondary and are the result of being genuinely curious.

One of the best people I know in almost every profession are the ones who are genuinely curious about their fields.

This curiosity in turn gives them the motivation and drive to do the right things needed.

What do I mean by being genuinely curious?

There are a lot of people who get into programming just because it seems like a good paying career.

Although there is nothing wrong in choosing a career which pays well, but that should not be the only thing which drives or motivates you to learn to code.

Lets be honest here, we all want to get paid and make more money, however having that as the only motivator would do more harm than good in the long run.

On the other hand, when you are so interested in learning how things work and why they are the way they are, things start to change.

You are now naturally driven to learn and do things the right way.

The motivation which comes out of curiosity is internal rather than external and hence lasts much longer.

What happens to people who don’t have the curiosity ?

People who are driven by external factors are more likely to give up.

Lets face it, programming is hard and it gets harder as you dig deeper.

If you are not curious, you will be frustrated all the time when you are hit with a problem.

People who are not curious will always do their bare minimum to get the job done and would never go the extra mile.

How curiosity makes you a great programmer:

You will have that inner motivation which comes from being curious.

You will love problems, not hate them.

You will love your job not because it pays you well but because you are doing what you are curious about.

Learning how to code will feel like an enjoyable journey rather than an uphill battle.

I hope this helps.

Stay curious!

Read my other answers:

Saurav Sharma's answer to What are some good, free resources to learn Python?

Profile photo for Stephen M. Bear

Stop thinking about becoming “world class” — that’s meaningless. Concentrate on getting better at programming. Continue getting better throughout your career.

There are no shortcuts, and no point at which you can say that you’ve learned everything you need to know.

A2A

Profile photo for Aarchi Gandhi

No Phone-Calls,

No Social Media,

No Disturbance,

Only coding & learning DSA from YouTube or buy a course.

Detox from everyone for at least a few hours in a day will teach you a lot ✨

P.S:- If you're reading this then do upvote this answer because it will motivate me to write more:)

No Phone-Calls,

No Social Media,

No Disturbance,

Only coding & learning DSA from YouTube or buy a course.

Detox from everyone for at least a few hours in a day will teach you a lot ✨

P.S:- If you're reading this then do upvote this answer because it will motivate me to write more:)

Profile photo for Sudip Maji

PRACTICE.

Practice is the key. The 10000 hours rule: To master anything you need to invest 10000 hours on it, it's 10000 hours of practice. To be good at anything, try to practice as much as you can, you'll be better each day.

About coding: practice, read blogs, write your learnings. Try to solve reallife problems through coding, for example: want to download videos from YouTube, write a program to do it; want to download songs, write a program; watching movie, need subtitle, write a program to download it; Need update on cricket scores write a program. All the best.

Profile photo for Ashish Kedia

* Coding is easy. You just need to type some keystrokes. The difficult part is using your code to solve a real problem.
* Learning programming is not easy. It will take years of practice. And it’s really hard to see the progress you’re making.
* Patience is of prime importance. You will be frustrated. You will be annoyed. You will feel like giving up.
* Mental exercise can help you concentrate

* Coding is easy. You just need to type some keystrokes. The difficult part is using your code to solve a real problem.
* Learning programming is not easy. It will take years of practice. And it’s really hard to see the progress you’re making.
* Patience is of prime importance. You will be frustrated. You will be annoyed. You will feel like giving up.
* Mental exercise can help you concentrate better and debug more effectively.
* Programming is a very recent form of science and this form is very close to the real life. You will often come across things that make sense in real-life but seem odd from programming standpoint. For example : A dollar is equal to 100 cents but a minute is equal to 60 seconds. Things like Daylight Saving Time and rounding-off are rich source of frustration for programming.
* Re-use as much as possible. You almost certainly never want to re-write cod...

Profile photo for Johny

Based on my experience I made a simple algorithm:

  • choose an area of programming:
    • Web programming
    • game programming
    • artificial intelligence
  • Write a good documentation/ notes
    • good programmers are not good because they know everything they are good because they know how to find it quickly!
    • sooner or later you will be lost in the ocean of information
  • Research the area:
    • tools
    • languages
    • famous people and groups
  • Buy books and materials
    • read quality content
    • practice the learned
  • Join a community
    • Test your progress
    • learn from the best and search for better than the best
  • Test your skills on hackatons / programming competit

Based on my experience I made a simple algorithm:

  • choose an area of programming:
    • Web programming
    • game programming
    • artificial intelligence
  • Write a good documentation/ notes
    • good programmers are not good because they know everything they are good because they know how to find it quickly!
    • sooner or later you will be lost in the ocean of information
  • Research the area:
    • tools
    • languages
    • famous people and groups
  • Buy books and materials
    • read quality content
    • practice the learned
  • Join a community
    • Test your progress
    • learn from the best and search for better than the best
  • Test your skills on hackatons / programming competition
    • this will boost your competitive skill
    • you will find the best of programming world
  • Start to work on world class problems
    • solve several problems
    • build a world class software
Profile photo for Quora User

I would recommend learning Java, if you just want to learn another language. It is always a top programming language demanded by employers, usually #1 or #2.

Being professional

Aside from that, most of your development as a programmer comes from working on actual projects of some kind. The kind of programs you work on in school are generally toy projects. They have little accountability if you get them right or wrong, and don't require you to communicate between fellow workers.

In the real world, you are always responsible to see projects through to completion. They are usually quite complex and

I would recommend learning Java, if you just want to learn another language. It is always a top programming language demanded by employers, usually #1 or #2.

Being professional

Aside from that, most of your development as a programmer comes from working on actual projects of some kind. The kind of programs you work on in school are generally toy projects. They have little accountability if you get them right or wrong, and don't require you to communicate between fellow workers.

In the real world, you are always responsible to see projects through to completion. They are usually quite complex and you are adding to existing projects. And you have to communicate a lot with your fellow developers to get things done.

Volunteering for projects

To gain experience like that, you could try volunteering to work on some project at GitHub. The work there is more like the real world than most school projects. And if you make a significant contribution there, your work is public and can be shown to a potential employer.

Researching employers

You should also make a list of the employers that you are interested in. Try to get an internship with one of these companies. At minimum, you should be familiar with the kinds of programming they do and what languages they use. That way, you won't be wasting your effort working on something that they don't use or have any demand for.

What is a good coder?

To me, a good coder is a:

  • creative thinker, because you have to be able to make plans about complex systems that are little understood
  • disciplined problem solver, because you will have to investigate and resolve a bunch of little issues each day
  • eager communicator, because good teamwork requires anticipating what information everyone else needs
  • flexible learner, because the demands of the job are always changing

Good coding isn't something that you know, so you won't know everything about good coding no matter how much you study. It certainly isn't just a matter of knowing the right languages, because languages are just tools. You have to be the one with the skill to wield the tool, not just know how it works.

Rather, good coding means each time you sit down at a problem, it is new, and you have to figure it out step by step. Most of this comes with having experience of different kinds, with the right kind of feedback to show that you are succeeding.

Profile photo for Mario T. Lanza

To be a world-class coder in 3 years, you'd have to give up everything other than eating and sleeping and focus on nothing but learning and building real world applications. It's not a realistic goal. Some of us have been at it for decades and we wouldn't consider ourselves world-class.

However, that said, if you wish to attempt it, you should read many great books starting with Structure and Interpretation of Computer Programs. You should learn a few of today's languages -- JavaScript, Ruby, Python, Go, Haskell, Clojure -- taking care to pick at least one of the functional languages. Abso

To be a world-class coder in 3 years, you'd have to give up everything other than eating and sleeping and focus on nothing but learning and building real world applications. It's not a realistic goal. Some of us have been at it for decades and we wouldn't consider ourselves world-class.

However, that said, if you wish to attempt it, you should read many great books starting with Structure and Interpretation of Computer Programs. You should learn a few of today's languages -- JavaScript, Ruby, Python, Go, Haskell, Clojure -- taking care to pick at least one of the functional languages. Absorb as many of the concepts each language offers as you can. You must write real world programs, something significant in each of the 4 or so languages you learn. Try to contrast how a language's properties affect the design. A language's concepts will have a huge effect on how you problem solve. That's why it's good to be versed in a few languages. You'll have more angles to tackle the problems you face, regardless of language.

Ultimately, you should grasp at least this much if you're to be anywhere close to world class.

Profile photo for Anonymous
Anonymous

Coder, huh? Merely five letters, but there is something more to it. Coding itself is an art. You must completely devote yourself to achieve that title. Learning programming languages isn't just enough. Learning a programming language is absolutely similar to learning a dialect language itself. Even if you learn a language, it's worthless if you're mum and don't speak out. Learn to implement. It depends on how you perceive it, how creative you are. And again, creativity isn't something easily gained. But creativity isn't something which is too far for anyone either. Start seeking out new things

Coder, huh? Merely five letters, but there is something more to it. Coding itself is an art. You must completely devote yourself to achieve that title. Learning programming languages isn't just enough. Learning a programming language is absolutely similar to learning a dialect language itself. Even if you learn a language, it's worthless if you're mum and don't speak out. Learn to implement. It depends on how you perceive it, how creative you are. And again, creativity isn't something easily gained. But creativity isn't something which is too far for anyone either. Start seeking out new things, learn and each and every step. Read, collect and store knowledge. Politics, finance, business, philosphy et cetera.

Don't just stop at one. The more you explore, the more you learn. Try to stay perseverant. Avoid expecting your first coded program or software to reach heights and gain you instant success. If one's not good enough, then try the next one. Never lose hope. Be perseverant.

That was a mental exercise. Technically speaking,

  • Learn as many as programming languages as possible.
  • Always stick to your basics. It may be using commands on cmd or on terminal (if Linux) et cetera.
  • Try Static typed languages than the Dynamic typed ones. You will be benefitted on a long term basis.
  • Try to make use of the best IDE's available in the internet. If you're learning C, prefer Netbeans over Turbo or Borland.

Well, these points may look short, but I feel I have just taught you how to stand up. You need to muscle up and get up. As you progress, there will be some things you must learn on your own. So good luck! And stay blessed!

Happy Coding

Profile photo for Hans Eklund

First, know that the programming trade seldom consists of only programming tasks, several other key activities will need to be mastered along the way - such as tools or methods of work for example. Thinking business does not hurt either combined with descent social skills. Also to be "world class", you must first define what "world class" means to your self. Do you want to be employed by Google or Airbnb? Do you want to make the most important contributions to Framework X? Do you want to make a lot of money? Do you want to have fun? What is fun for you? What kind of programming do you prefe

First, know that the programming trade seldom consists of only programming tasks, several other key activities will need to be mastered along the way - such as tools or methods of work for example. Thinking business does not hurt either combined with descent social skills. Also to be "world class", you must first define what "world class" means to your self. Do you want to be employed by Google or Airbnb? Do you want to make the most important contributions to Framework X? Do you want to make a lot of money? Do you want to have fun? What is fun for you? What kind of programming do you prefer?

Recognize this: software is done in many (all?) fields now days. My Uncle worked on the S/36 in 70s and later on the AS/400 and retired on the iSeries, IBM all the way, (he wore a knife on his belt as a Junior to mark the order of his punch cards!). Years ago, when I told him what i did with C and Linux (of course very proud of having some skills in C), he chuckled and said "Yeah, but you are doing technical programming..." - he was an RPG programmer all his life. Me being the Junior coming out of the Masters program I had not recognized that software development could be so diverse. Building a hardware driver for the latest embedded OS is vastly different from maintaining a component dealing with business transactions in a financial system. The skill and mindset needed differs accordingly.

So anyone who tells you that N or M are the best programmer in the world, you should immediately ask: within what field?

So depending on your goals, your steps from now will be defined by them. Mastering Python and C is of course two solid and useful choices for any developer. Adding Java and or C# would open up doors to many more jobs but probably into different fields of programming. I think you can go very far by going forward from age of 21 if you can convince someone to hire you without a formal higher education only based on your skills as a hobbyist. But if you are having trouble getting an actual job from your current skill set, i would recommend you to pursue a Computer Science or Software Engineering education - depending on what path you believe you are on and along the way get your self involved in open source projects even if you not committing any code at all. Dissect and dig deep in to the frameworks you using in your own projects.

Lastly, programming or whatever you want to call it is much more of a trade than a field of good old engineering or science. You have to practice it a lot and preferably together with a few friends and colleagues much more experienced than your self. That is why I would want you on a Job or College ASAP. Do not be afraid to fail in front of the gray beards. You will learn a lot and have lots of fun along the way. And since you are loving it, you are half way there.

To boil things down and be concrete:

  • Get a proper education - preferably broad to be open for many fields as a junior.
  • Get involved in open source projects - contribute and/or study other projects
  • Get involved with other people - preferably developers much better than your self, as a junior developer or with other students.
  • Later, you can focus in a single field and be world class within that field. But don´t focus too early, you will need to find your way around the business to find your place.

Coder, huh? Merely five letters, but there is something more to it. Coding itself is an art. You must completely devote yourself to achieve that title. Learning programming languages isn't just enough. Learning a programming language is absolutely similar to learning a dialect language itself. Even if you learn a language, it's worthless if you're mum and don't speak out. Learn to implement. It depends on how you perceive it, how creative you are. And again, creativity isn't something easily gained. But creativity isn't something which is too far for anyone either. Start seeking out new things

Coder, huh? Merely five letters, but there is something more to it. Coding itself is an art. You must completely devote yourself to achieve that title. Learning programming languages isn't just enough. Learning a programming language is absolutely similar to learning a dialect language itself. Even if you learn a language, it's worthless if you're mum and don't speak out. Learn to implement. It depends on how you perceive it, how creative you are. And again, creativity isn't something easily gained. But creativity isn't something which is too far for anyone either. Start seeking out new things, learn and each and every step. Read, collect and store knowledge. Politics, finance, business, philosphy et cetera.

Don't just stop at one. The more you explore, the more you learn. Try to stay perseverant. Avoid expecting your first coded program or software to reach heights and gain you instant success. If one's not good enough, then try the next one. Never lose hope. Be perseverant.

That was a mental exercise. Technically speaking,

  • Learn as many as programming languages as possible.
  • Always stick to your basics. It may be using commands on cmd or on terminal (if Linux) et cetera.
  • Try Static typed languages than the Dynamic typed ones. You will be benefitted on a long term basis.
  • Try to make use of the best IDE's available in the internet. If you're learning C, prefer Netbeans over Turbo or Borland.

Well, these points may look short, but I feel I have just taught you how to stand up. You need to muscle up and get up. As you progress, there will be some things you must learn on your own. So good luck! And stay blessed!

Happy Coding!

Profile photo for Jeff Gong

When you first start programming, your only goal is to actually make your program do what it’s supposed to do. Whether that be rebuilding your favorite arcade game in Java or writing a shell in C, as long as it works, who cares what the guts of the program are like?

In reality, a lot of what we actually do via software, and the reason why we can write some of these simpler programs so easily, is because so much of the depth between a line of code on your text editor and how that translates into signals that are understandable by your computer is abstracted away. But it is through peeling each o

When you first start programming, your only goal is to actually make your program do what it’s supposed to do. Whether that be rebuilding your favorite arcade game in Java or writing a shell in C, as long as it works, who cares what the guts of the program are like?

In reality, a lot of what we actually do via software, and the reason why we can write some of these simpler programs so easily, is because so much of the depth between a line of code on your text editor and how that translates into signals that are understandable by your computer is abstracted away. But it is through peeling each of these layers away and digging deeper into why things work that will make your a better coder.

For example, you are hosting your own web server that services your personal website. You add a great feature to it and share it online, but much to your dismay, you’ve received so much traffic from anonymous users that it crashes your server! What stopped it from working, and how is this an applicable question that many companies face? After all, you can imagine each second just how many people might be using Google, or YouTube, or any other of hundreds of services designed to reach people on a global scale.


Now the above is how I think one can improve oneself technically on a broad sense. Always have an inquisitive mind and don’t settle for just making something work, but instead aim for depth of understanding. These can also translate into a set of tangible goals you can aim to work on (highly subjective). To me, the following has helped as well:

  • Produce easily understandable and sharable code. If my peer had to fix a bug I caused in my new code in under an hour, would s/he be able to decipher what I am doing and work on top of it? When you first write a program for the sole purpose of making it work, this might not be something that you can answer “yes” to so readily
  • Assess the modularity and efficiency of your code. You don’t want to barf out a function that handles an entire host of actions. Things should be cleanly separated and every piece of the code be it class, object, or file should service as small of a piece of work as it can within reason. Have I re-invented the wheel or can I use other variables and functions that might already have been introduced?
  • Consume as much content related to your work as you want. Obviously you don’t need to spend all your free time reading articles about C++, but on the job or during a project, I can’t count the number of times a random tidbit of information I absorbed when reading a technical spec, RFC, or random internet article has helped me. Never be afraid of asking questions and read, read, read!

There are a ton more things you can do, but at a broad level, I firmly believe that re-approaching your code with this mentality and working on consuming as much information as you can will help you best. Good luck!

Profile photo for Imtiaz Mohammad

The same way a surgeon, pilot, lawyer or cricketer becomes professional without classes. Which is, they don't.

Can a barber become a professional without classes? May be.

You get the idea.

There is a ton of free computer science material out there that can be and should be used for self learning. However, you can’t discard the importance of mentors and the face to face, live interactions with seasoned professionals.

About · Careers · Privacy · Terms · Contact · Languages · Your Ad Choices · Press ·
© Quora, Inc. 2025