'I Know How To Program, But I Don't Know What To Program' (devdungeon.com)
An anonymous reader has shared an interesting article that talks about one of the most common challenges faced by novice developers: "I know how to program, but I don't know what to program." The author of the article also shares his views on some of the most common solutions for that problem: "do programming challenges", "contribute to an open source project", or "make a game." From the post: Doing programming challenges is good mental practice, but they do little to help someone learn how to create a new program. Contributing to an open source project is a step up. You might learn about how a real project is structured and improve your skill with the programming language, but you won't learn much about the full lifecycle of a project. Some projects are very complex too which can be intimidating for a novice. Making a game is another step up. Games are fun! I started by programming games in QBASIC. The same dilemma arises though. "I want to make a game, but I don't know what to make." The author advises these beginners to try rewriting a library which already exists (despite this being considered as a prohibited practice by many). Developers should also not wait to get the "best idea" before they begin writing it, the author adds. From the post: I've seen the same mentality with musicians. Trying to create a masterpiece on their first attempt, putting all their energy into one song and not seeing a bigger picture. The bigger picture being, you will write LOTS of songs over time, not just one!
Find a small problem that you are in fact facing in your day to day life, and write code that would solve it. Code has to solve real-world problems and there is nothing more satisfying than writing code that solves an actual problem. For example, write a "HELLO WORLD" program; and make it run at boot time, voila! H
Find a problem and solve it. Your first (few) programs don't have to be full on applications or games. They just have to solve a simple problem you or someone else is having. Case in point, I am a networking professional (CCIE #12981). I run into things like, "what is the current inventory of devices on the network?" So I wrote a 'script' which does what I would do manually. It logs into a 'seed' device using provided credentials, downloads information like serialization and addressing, and then figures out connected devices from there. Newly discovered devices are then submitted to the same task. Problem solved. In another effort, I was working for a firm that sold a particular service and our back-office documentation to fulfill the order was so cumbersome that the probability for error was a statistical certainty. So I wrote some VBA inside a spreadsheet that took the metrics form the customer, and produced the requisite documents directly.
Find a problem. Solve it; simply, directly, efficiently. That will give you experience AND provide a useful output.
You are a very bad man.
I'm a systems guy, so most of my development is automation focused (scripts, really simple programs, etc.) The thing that I've noticed about _application_ development is that it's much harder these days to get something functional going right off the bat. Back in the old BASIC days with simple console output it was pretty easy to write a program that both did something tangible and was simple enough to be instructional. Now we have the twofold problem of massive abstraction and having to write against huge SDKs and frameworks so that we don't constantly reinvent everything. That line between writing actual instructions and just connecting huge Lego pieces is getting blurrier every day.
I've always wanted to expand my knowledge of software development, but the problem in this article is very real. There's tons of backstory required to write simple Windows desktop applications, for example, even in the managed languages.