June 2nd 2020
A senior Java developer and Java tutor at Learning Tree International programming courses.
Anytime I visit r/programming, without fail, there’s a post of a programmer that goes “I’ve completed Sololearn courses, read through coding books, and finished my CS curriculum. I even understand most programming jokes. So, am I already good enough?”.
Normally, when I see these posts and go “No, you are not. Do you think in code the way you do in your native language? If no, then go re-read “Think Like a Programmer”.
The road to programming language fluency is long and there is no endpoint, at the end of the day you need to ditch CS quizzes, develop your own products, and (I know you’ve been waiting for this one) look for jobs.
How to shed the unconfidence of a programming learner and become a professional? Here is the description of my personal journey, step by step.
It’s sad for me to see how many programming students master a language as a range of abstract concepts are completely clueless about what to do with it outside of the classroom. That’s why I tirelessly emphasize the importance of simple and straightforward projects that make a confident coder — here are my favorite ones.
On its own, the game is simple but the impact of the project on building up your grasp on programming logic is astonishing. Here are the rules to follow for coding:
- Create a nine-tile playfield
- Assign placing an X to a player while placing an O — to the computer
- Add a pop-up window that asks a player where he wants to put an X
- After a player placed an X, a computer places an O
- Determine the winner
This task is divided into two parts — translating the underlying logic of the game into code and building a user-friendly interface to make the experience enjoyable for players. For starters, let’s outline the rules of the game:
- Create a list of letters with 5–6 letters in each and make it so that, for each game, a random entry is displayed
- Ask game participants to guess letters of the chosen word
- If a player guesses the right letter, use it to fill in the corresponding blank
- If a player makes a wrong guess, let him know how many tries he has until the man is hanged
After implementing the principles above in your code, focus on wrapping the final product up. Since programming is not about creativity but functionality, using off-the-shelf GUI packages is highly appropriate. For Java, I typically use Swing — there are dozens of interface elements available.
If these example projects are too basic, there are plenty of examples online that will help you hone your craft as a programmer. Here’s the list of platforms that are must-haves for programming students.
To make sure you are confident in applying a programming language in the real world, dedicate the final stages of software development education to getting as much hands-on experience in coding as possible.
The good news is, there are a lot of useful resources that challenge developers with puzzles and practice problems. Here are my favorite ones:
I am a Java tutor and enthusiast — that’s why I get especially excited about discussing new projects. Right now, CodeGym is the first platform I usually direct students to. For one thing, this resource targets Java only — thus, the development team’s perception of the language is highly in-depth.
Other than that, I find the learning curve CodeGym offers extremely well-structured — all practice problems are grouped depending on which concept they target. You can find dozens of tasks on Java syntax, then move on to collections, typecasting, OOP, and other concepts.
There are over 1200+ practice problems in total — after completing all of these, you will definitely be ready for job interviews.
Available for 10+ programming languages, Coderbyte has hundreds of languages for developers with different levels of experience and skills. Depending on your skills, you can either choose straightforward tasks (finding the shortest word in a string) or advanced puzzles (like those on graph cardinality matching).
If you want to introduce friendly competition into the learning process, definitely give Codechef a try. This platform hosts regular programming competitions and offers a wide range of challenges for Java, Python, C, and other popular languages. You can write and check the correctness of your code using the tools built-in editor (with quite a convenient interface if you ask me).
If you are set out to look for programming jobs, don’t miss out on LeetCode. This platform is a real deal for practicing coding in real-world conditions and preparing for employer interviews.
LeetCode supports seven programming languages — C, C#, C++, Python, Ruby, Java, and JS. You can explore two modes of the platform — challenges grouped by topics or “Mock Interview” — a mode where you are bombarded with coding questions concerning all facets of the language and have a limited amount of time to answer the problem.
SPOJ is one of the biggest coding practice platforms out there, with over 20k programming challenges. Sphere Online Judge hosts regular hackathons as well, allowing developers to face each other and improve together.
Personally, I had an issue with the fact that SPOJ is fully peer-to-peer, meaning you won’t see official practice problem answers and have to put your trust in fellow developers.
Even if you nail practice problems and understand the theory of the language exceptionally well, there’s more to becoming a top-notch coder.
Immersion in the programming community will help you find out which challenges professionals typically face, which projects are the most popular, get to know the industry’s inside jokes, etc.
This way, when you get your first programming job, you will have no problem making the office your second home.
Where can you get in touch with programmers? I sorted through forums and communication channels I check out to connect with peers — hopefully, these will help.
- Hashtag Developers — the biggest programming channel on Slack.
- European Dev Explorer — a helpful channel for developers who consider relocating to a European country — covers job markets, costs of living, taxes, etc.
- Angular JS Chat — a place where the best Angular developers share cases and answer coding questions.
- DevOps Chat — one of the nerdiest Slack communities out there, mainly covers in-depth DevOps concepts.
Here are other well-known forums where both beginner and advanced programmers typically hang out:
Make it a habit to format the code and the Readme file of every project you complete comprehensively so that an employee doesn’t struggle when reading it. If you don’t have a GitHub account yet — get one immediately (for me, a high number of Github projects is what separates programming students and professionals).
How to make sure your project is ready for being shared with the world? Here’s a short and helpful code formatting checklist:
- Describe the project in detail in the Readme file to give employees context on your work
- Avoid pasting ready StackOverflow or Github code fragments. Rewriting is okay but directly using what others wrote isn’t since you will not be able to explain the workings of the code in detail
- Name all objects and variables diligently. It’s common for beginner developers to create variables with weird, internal-use-only names along the lines “0hy1”. Such a naming practice might seem faster — however, it makes your code extremely incomprehensive and difficult to maintain in the long run
- Leave comments to make sure a different programmer would understand the project. Since, at some point, you would be working at a company, leaving comments to guide the peers who will take over the project is a must-have practice. That’s why it’s better to build the habit of commenting on your actions early on and share only commented code publicly
- Unit test your projects. Everybody knows that unit testing is a developer’s job so employees have come to expect it from job candidates
- Stick to a consistent code structure and style throughout the project
As you can see, learning the programming language is only the beginning of your journey in programming. The good news is, whatever is waiting for you down the road is fun and exciting since you can finally build real-life solutions, look for paid jobs, and proudly call yourself a developer.
To bridge the gap between learning and professionalism, focus on using theoretical knowledge to solve practice problems, create and share your projects online, and don’t forget to visit online developer communities — Stack overflow, Reddit threads, and Slack channels.