101

It's critical. I don't think I've ever known a good programmer who wasn't self-taught at some level. As a hiring manager at a large company, I can say that a candidate who describes personal projects and a desire to learn will trump one with an impressive degree every time. (Though it's best to have both.) Here's the thing about college: Computer ...


96

Don't worry about meeting some ridiculous concept of "skill" so commonly heard in such statements like: All programming languages are basically the same. Once you pick up one language well you can pick up any other language quickly and easily. Languages are just tools, there's some overarching brain-magic that actually makes the software. These statements ...


87

There's a few things to note about getting into programming. First off, you will never know everything about programming. You'll probably never even come close to knowing a fraction of everything. And if you ever get to thinking you know something, something new will come out and what you know will be obsolete. So, you need to be OK with constantly ...


85

It's simple. C++11 makes code dramatically easier, cleaner to write, and faster. nullptr is a VAST improvement over the old 0. It's type-safe and doesn't convert when it shouldn't- unlike 0. It's a good thing that nullptr won't convert to an int. It doesn't make sense for that to happen at all. Do you know what the C++ Committee found when they tried to ...


68

I think that the knowledge of the Automata theory is critical for understanding. Once you understand what an automaton is, and how regular languages are defined, understanding the regular expressions will be much easier. As to the specific syntax and differences between the various implementations... Well, some things you just have to remember. There are ...


45

You learn how to write programs by writing programs. But you gotta start small, man. public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } From there, begin building... public class HelloWorld { static String test = "This is a test"; public static void main(String[] args) { ...


44

There is no "correct" order to reading these books. They each focus on different aspects of software engineering. Clean Code - focuses on coding in the small. How to write classes and functions. Code Complete - focuses on the processes of software engineering. Pragmatic Programmer - focuses on working within a team producing software.


41

Based on my experience, I would rank the following activities in order from easiest to hardest. Reading good code Writing bad code Writing good code Reading bad code The above ranking leads to 2 conclusions While it is easier to write code than reading bad code, it is easier to read good code than write your own code Writing bad code is easier than ...


37

Short Answer: Engage them (put the puzzle in their mind), empower them (trust their answers). It is the question that drives us! - Matrix. Generally, in my observations, that juniors have their own world - their own limited view of how they think and in some part their own enthusiasm/favorites/opinions about things. There is nothing wrong about ...


37

In a high school class, you're in the most basic level of your path to mastery. Things that are covered in your class are the kind of things that a professional programmer are expected to know cold. In a lot of ways, this is akin to learning your "times tables". Of course you'll always be able to grab a calculator in a "real-world" setting, but this ...


36

By practicing. I learned by having fun with web scraping. I'm sure I wasn't alone doing that just for fun. One example: Write some code that retrieves the latest football, tennis (the sport you like in fact) scores from your favorite sports website. Do it by writing some code to load the page, extract the scores with regular expressions and output them to ...


35

Asynchronous programming is much more of a philosophy than just another programming trick. While, your last question attracted answers mainly about programming aspects and my answer was a disconnected loner for being mostly theoretical, I am trying to give you a fresh perspective building on the same line but explanations rather than just references. ...


34

Troubleshooting existing code is a super way to develop as a programmer. If the code is bad, you will learn the impact of the mistakes they made, and maybe avoid some of them when you are doing the designing. If the code is good, you will learn something about how to make a maintainable application. You will also learn to deal with the complexity of a ...


34

Well at the risk of sounding slightly cheesy: Ideas are timeless. By this I mean that the notion of a depth first search is goodness knows how old, but still totally relevant. Likewise, things that aren't totally platform and technology dependent tend to have a longer lifespan. If you learn things like Algorithms Data structures Paradigms and Concepts ...


30

IMO it is best to separate those issues which cause direct problems/harm to the project from those which affect only that single developer. E.g. if he prefers to checkout everything multiple times a day, it will slow him down, but otherwise won't affect others. So you can just let him do that (until there is a noticeable performance lag in his work), and ...


29

C++11 is not a new language; it is only an extension/modification of C++ that you already know . C++11 just like any other programming language consists of features. A lot of them were there from before, some of them are new. But your question really is, should I learn all features of the language (in this case C++11), or only familiarize myself with 90% ...


29

Self-teaching is very important. You cannot rely on a formal education to teach you everything you need to know about your field. However, that being said, a formal education is also very important if you want to enter that career field well-prepared and well-equipped. I am on my way to college and have spent the past four years teaching myself software ...


29

The thing with learning drastically different languages isn't about learning the languages, it's about getting exposure to different approaches to problems. Tools for the toolbox as it were. One thing to note is that Haskell isn't particularly old and it is actually a very good candidate for someone only familiar with mainstream languages. Even a very old ...


27

People don't program in machine code (unless they are masochistic). They use (or develop) tools to generate machine code (compiler or assembler, including cross-development tools), or perhaps libraries generating machine code (LLVM, libjit, GNU lightning, ....). So resources about machine code generation, compilation, optimizers, and micro-architectures are ...


27

Ceylon seems like a nice fun language but I'd argue it has relatively few "advantages" over Java. I think it has a nicer syntax and some more "modern" language features - though this is subjective and I'd argue should be relatively minor factors in choosing a programming language. Much more important factors when choosing a language / platform for a ...


26

If you want your juniors to think for themselves, don't correct them: get them to correct themselves. Instead of telling them what you think is wrong about their solution, ask them pertinent questions about it. In your example, you could ask them about what someone using the extension method would need to know to create the lambda. Keep asking questions ...


26

Some hints: Learn other languages. Then compare them to the language(s) you already know, and try to look at the ways you can improve your coding skills in those languages by using things you learnt from other languages. "Free your mind" before learning those new languages, and don't try to simply clone the concepts of one into another. Read code. I don't ...


25

Perfectionism is a poor developer's excuse for not getting the work done. Larry Wall, in the glossary of the first edition of Programming Perl, famously notes: We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris. In the second edition of the book the terms are further defined: Laziness: The ...


24

You should learn it if you think you will need to know it in the future in order to get a job. If you are confident you will remain marketable in the workforce as a C/C++ [ and whatever else you might know ] then don't learn it. If your boss tells you to use C++11, say "no, I don't do that". If he fires you, go work somewhere else. Learn C++11 when you ...


24

My friend was a frequent flyer for many years, but he always wanted to be an airline pilot. One day he took an opportunity to fly Boeing 747. After about six months he felt like giving up: he thought he would be good at flying airplanes, but this experience of the last six months made him rethink his decision. Of course I'm kidding: I do not have such a ...


23

I know you're not asking for resources but Mastering Regular Expressions by Jeffrey E.F. Friedl was how I learned how they work and how to use them. Even after getting to the point of using a lot of them to parse different things the first chapter had new things for me. You want to understand those damn regexp? Read this book.


23

Stay Fit: Get Regular Practice Practice makes perfect. The more code you write AND read, the closer you get to enlightenment / mastery as a programmer / developer / software engineer / guru / ninja / craftsman / hacker / buzzword-of-choice. By not only coding and reading more, but also trying our new ways of writing code, the more open-minded you (...


23

Well, I don't know if this book will help you, but when I worked myself through that book about 20 years ago, it definitely improved my programming skills (independently of any programming language). And I guess especially a Java programmer will get some new insights he/she won't get by sticking only to Java. Joel Spolsky 2005 wrote a nice article about ...


23

First, despite the way your question is formulated, there is no end to any studying, especially not in our field, where new things pop up faster than you can read about them. That being said, when you want to improve, there are the following categories that I'd consider. For the most benefit/ROI you should choose something from your weakest area of course. ...


Only top voted, non community-wiki answers of a minimum length are eligible