'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 an old computer science research paper that seems interesting.
Implement the hell out of it.
Seriously, most advances in the industry are from expired patents and research that was done in university 20 to 30 years ago.
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
Contributing to open source always seemed intimidating as a novice. I'm too afraid I'd wreck the code or introduce bugs. Basically create more problems than solutions.
I stick to my own little scripts for my specific needs, knowing that the code is clumsy.
One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
I know how to post a comment, but I don't know what to say.
The author advises these beginners to try rewriting a library which already exists (despite this being considered as a prohibited practice by many).
This is how I learned a lot about Perl, C, C++ and to a much lesser extent JavaScript. I wrote (crappy) web frameworks in Perl, front ends for MySQL in C and even tried reinventing concepts from the STL in C++. Not one of my pet projects ended up in production systems for very long, if ever. I simply did them to scratch an itch and help myself understand the underlying principles. My understanding of Perl and PHP frameworks improved immensely and I learned it wasn't nearly as hard as I thought to get under the hood and learn when something wasn't behaving the way I expected it too. Implementing STL dupes help me actually be able to parse Bjarne Stroustrup's books on C++ and in general gave me a much deeper understanding of programming in various languages. Was I able to make better tools than a team of experts working on something together for years? Hell no! Just improved my ability to understand and use their work.
It's like learning assembly to understand how computers work, you're probably not going to do much of it in the real world but it will help you more than you think when you develop that level of understanding.
Creationist Textbook Stickers Declared Unconstitutional by CowboyNeal
This is a basic practice of learning. You can try to make a couple of great works in a lifetime but take forever to finish a work, or you can be prolific and learn how to make lots of works, including a bunch of great ones. A few people get away with the "a couple of great works" thing. (IIRC, Picasso did this). But most people learn more by jumping in.
The study I remember on this involved learning to make pottery. If group A tries to make every bowl perfect and group B makes a lot of bowls, then after a few weeks group B produces much better bowls.
There are obviously limits and variables on this--a master builder cares more about his product and may build more slowly than your average builder, for example. And in rare cases, maybe jumping into the wrong software project is worse than learning nothing at all. But in general, working is better than not working.
Real lawyers write in C++
For me, I've learned more from on job experience than I did studying computer science at college. You get paid to learn and it also eliminates the "I don't know what to program" question.
Some people die at 25 and aren't buried until 75. -Benjamin Franklin
If you're looking for a project to demonstrate your ability to do the work for a living, don't write a game. Not that a game won't demonstrate useful coding skills, but the bigger skill you want to demonstrate is that you are able to solve problems. A game is a self-directed problem. You have not demonstrated that you can take someone else's requirements, communicate with them, and solve their problem. You haven't shown that you can work with or for other people.
Unless the game is for someone else, but then it still looks like you have to be entertained to be motivated.
I have the opposite problem. I have a dozen good ideas (and many more simple/fun ideas), just not the time to do it. I program for work and for fun. I find it stimulating and exciting to solve complex problems through programming.
Learning to start from scratch is a hard thing to overcome. Many of the students studying CS are given a task, and a bit of direction on how to complete it... typically given a framework to work with. They are never pushed to think outside of the box and build something from scratch.
Once you get past the very basic fundamentals of how to manipulate data the world is your oyster. You can build anything if you put your mind to it, even in high level languages like Python, JS, PHP, etc. whatever the kids are learning these days.
If you did, you'd have no problem finding problems to work on. What you got is the mere basics and now need something to chew on, something to build foundation with, something to strengthen the beginnings of the skill you've barely reached journeyman level with.
Go and try the exercises at codingbat, and once you've done them all, suggest at least one new problem plus test coverage dataset.
Disclaimer: No relation except having done most of the problems (a few have been added since).
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.
we need new Hello World! programs for all those recently discovered planets.
Sheesh, evil *and* a jerk. -- Jade
I'd like to do something creative, but I don't know what to create.
I'd like to make music, but I don't know what to play.
I'd like to make art, but I don't know what to make.
Seriously. If this is you, go and do something else. You're not an independent developer. You're going to need ideas for that.
I'm not doing a great job with it at the moment, but it's worthwhile and needed: http://onemodel.org/
A Free, fast personal organizer for touch typists: onemodel
I have the exact problem. I am very proficient at programming but between projects I really have no idea what I should do. My current strategy is to just program what I need, even if that need is basic and can be covered by something non-programming (like managing directory structures). My first ever GUI project with python was a simple calculator that could convert between bits/bytes/Kb/KiB/etc. Just find something that pisses you off, that you could improve on or do better, and have at it!
I wanted better music for a video game I play, but I wanted that music to be context sensitive. I found a log file in the game's directory. Figuring that cross platform would be useful as well, I now had the motivation to learn C++ via the Qt framework.
I wanted my living room lights to dim when I play a movie automatically. I use kodi. I now know how to make Kodi plugins.
I wanted something that reports the vitals of my various computers to a central message queue. While I wrote a linux reporter in python, I wrote the windows reporter in C# and was a great avenue to learn c#. As well I learned all about the amqp protocol.
Don't solve problems that already exist, don't try to make the NEXT GREAT THING, just identify things you want personally, figure out how to make it, and worry about trying to market it later.
I'm god, but it's a bit of a drag really...
This question will be increasingly common, as the powers that be push relentlessly to turn everyone into a 'coder'.
Obviously if you don't know what to do with your skills, you're in the wrong profession.
If you can't think of a game to make. Buy a board game and make a digital version of it.
I'd stop trying to program and start trying to unravel the maze that is today's modern development environments. Correct usage of tools like git, gradle and Eclipse are frequently the largest barriers between new programmers and the projects they want to contribute to.
I know exactly what to code, but I have no idea how.
Seriously.
During my free time, I design a game. Background, lore, game mechanics, formulas, skill forest, greater universe, etc. Implementing it? THE showstopper.
So... anyone who can code but has no idea what, come to me and I'll give you plenty to code - and it's gonna be fun.
...gis sdrawkcab (usually not responding to ACs; don't bother posting as AC)
But I don't have the time to program...
I remember another problem I encountered as a beginner, I had ideas of what I wanted to program, but they seemed impossible for me to complete at my skill level. This was a major hurdle at first. Eventually I just said, "Screw it" and dove in, and my skills started to increase almost exponentially. Sure, I have a lot more half-finished toy projects than successfully completed ones, but they were just stepping stones to where I am and where I want to be.
In other words, one does not program in a vacuum. If one finds oneself in a backwoods or somewhere that technology is monopolized by state actors, it is very difficult to find anything that "needs done" because the technical infrastructure to support such endeavors either does not exist or is tightly controlled.
Doesn't mean you can't find a niche anyway, but it could take years of poverty first.
How about games of chance: blackjack, poked, or craps?
How about a text-based RPG?
How about a strategic city building game a la Civilization?
How about an RTS?
I can program too and I'm no n00b.
But I have ideas for roughly 200 Projects and programs in store. Definitely enough to keep 10 teams of 5 to 10 people going for a few years. I've got ~30 Projects started and only one or two are the real biggies.
Here are some ideas, if you're struggling with that phase:
- Successor to Email. The world needs it. (Hard Crypto and discussions built in of course)
- zero-fuss x-plattform namecoin dns GUI
- zero-fuss x-plattform namecoin Server
- Web gl FOSS distributed Eve Online ripp, cheat-proof cryptocurrency integrated
- total WordPress redo with clean architecture, webbased ide and CASE Tool/object Modeler built in
- FOSS Tribes 2 ripp
- FOSS MechWarrior ripp
- FOSS x-plattform Git GUI that doesn't suck
- Rebranded Gimp with single window mode and others sane default configs
- non-shitty FOSS distributed Facebook replacement Server + non-shitty Web gui (hard crypto auth and anonymity built) ... Please do NOT build this with some bizar scripting PL or LAMP contraption - this is NO place for LAMP!
- While we're at it: All webappserverstacks are shite. We need a LAMP Killer. Some neat x-plattform appserver in C++14 with an all-out Web Admin UI built in, Modeler included.... Build the WP replacement from above with that.
- zero-fuss x-plattform Crypto Chat Messenger. Like Xabber but in finished. And for Desktops too.
I could go on and on but you get the idea. Not knowing what to program is a Problem I don't understand ... Seriously.
We suffer more in our imagination than in reality. - Seneca
If you have some process that you do a lot, or that you do particularly well, then write a program which enables you to do it better, If you need to keep track of who you are meeting, and who you want to date, then write an app that helps you to accomplish that
The list is endless, just remember that whatever you are dealing with, there are probably a few million other people facing the same challenges
I bet you have a lot of itches you want to scratch. The first thing is to identify some of the itches.
I like playing games, why not try to make a simple one. You quickly realize how much content is needed even for a simple game, but it isn't about creating the game, it is about learning.
I decided I wanted to take some of the tables from AD&D 2nd Edition and automate them. I didn't just want random numbers, I wanted to "roll" the dice. This is how I found out that Rand() isn't so random. I actually spent quite a bit of time getting a more random random number generator. This investigation of random in the context of computers has served me well in my work. I've fixed quite a few programs that were supposed to be random, but were not seeming random enough.
Maybe stats is more your thing, well get your information into a database and start playing with ways at looking at it. Maybe you want to figure out some cool way of looking at the information.
The trick is to find an itch and start scratching it. Don't worry if you don't complete it. Don't try to get it absolutely perfect the first time. Build something that kind of works. If you are still interested after that, refine what you have built and add more functionality. If you loose interest in it, drop it and move onto something else. You can always come back later if you get interest again. Maybe you end up with something you are really happy to share.
Rewrite slashdot to either support unicode properly, or (preferably) not support it properly.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
I was going to suggest making your own self driving car, but that's just as good!
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.
Seriously, get a beginner-level job. Write some code for cheap, even for free. Maybe meet a mentor or two while you're at it.
Or if you're a student, march into some department's office that needs programmers (not comp-sci, but something like aerospace engineering where they need programmers and they can't program that well). Offer to help with some professor's project and see where it takes you.
In learning programming, you had to use a bunch of programming tools (like text editors for example) and discovered they were not optimal to your way of working. So write your own. A quick Google search will show there are almost as many text editors out there as there are programmers. 99% of them have an installed base of exactly one; the person who programmed it. But that's OK, you created a tool that works exactly the way you want it to. Now move on to the next problem. Sometimes the solution suits only yourself, and sometimes it's useful to others as well.
Support Right To Repair Legislation.
You might as well say you know how to touch type but are staring at a blank sheet of paper. Programming is a tool for solving problems. You need to have a problem domain you're interested in (or somebody is paying you to be). Everything else is reinventing the wheel for practice.
Yeah, or robotics. Make a self-flying drone or something.
"First they came for the slanderers and i said nothing."
Write what your boss tells you to write.
the growth in cynicism and rebellion has not been without cause
WTF kind of solipsistic zen bullshit is this? In the real world, real programmers write whatever the fuck their boss tells them to write. We're fuckin' code monkeys. When I get a spare moment on my weekends to do hobby coding, I get coder's block. I'm not an idea guy; that's for marketroids and designers. I just want to be pointed in a direction and I'll code my ass to it. Any creativity I have is spent on figuring out solutions, not problems.
Start with automating a common task you do, or something you'd like to do in an automated way. E.g. scrape EBay for interesting listings, or make a Slashdot post-counter or a script that compares the price of Toilet Paper across various outlets ... whatever tickles your fancy. Best way to get going.
I have a pencil, but I don't know what to write.
New encryption !
Give the TLAs extra work!
if not good enough to stop them, make them get overloaded with new algorithms!
I can't program at all, tried to learn still am slowly, yet I have multiple ideas that I wish I could actually make happen. Creative mind with no real outlet.
Most people in America know how to write, but that does not make them novelists. Many know how to use a hammer and a saw, but that does not make them a carpenter. Likewise, knowing how to code does not make one a programmer, nor will it guarantee success in life.
With this push on programming, we will simply turn what was once a respectable profession held by those with a real aptitude into the next classification of menial labor. That might be good for business, but not for the individual if they are trying to support a family.
I'm not saying that people should avoid learning to program. However, it isn't the solution for future success like it is being portrayed. Besides, regardless of what programming is taught to the masses, it will be outdated before their studies are completed.
Find a hot selling app for the iPhone that doesn't exist on Android and port it over. Or vice versa. You might even make some money in the process!
The soylentnews experiment has been a dismal failure.
I am confused.
How does one learn to write software without first enjoying it? Are there people out there who can play the violin, but don't know what to play? Why did they pick it up in the first place? If anyone out there knows woodworking but doesn't know what to build, or can do electronics but doesn't know what they want to wire - please email me and I will put you to good work.
How does someone learn a skill, particularly a fairly academic one, without having a desire to do so? Is this some kind of generational thing because everyone I know who can write software does it because they wanted to build something. Same goes for any other skill or trade. The exception would be a few "dot bomb" progarmmers who took CS because they thought it would make them money. Few of them survived beyond a few years in the trade.
no text
I started learning to program around 1987, and got my first job in 1998. After about a month of real work a light came on and I realized I enjoyed having somebody else who knew what I should program. That doesn't keep me from still writing programs I really want, but it is very rewarding for me meeting people's needs by writing the programs they envision.
Secession is the right of all sentient beings.
As a software developer myself, I mostly work off user stories and within sprints. Someone else spec's the the project and I turn it into code. As a living / breathing human with interests outside of programming, I often find ways code can make my life easier. I never have a chance to actually build these applications though, since I program 40 hours a week and just want to do nothing when I go home
We're fuckin' code monkeys.
Damn straight.
Particularly in a non-technology company, like insurance. They'll give you LOTS to program, probably in PL-SQL.
Save Maine's economy: write stuff down. All comments are exclusively my own, not my employer.
Ask your manager and quit bothering the rest of us here. Keeping you productive is his responsibility, not ours.
In Soviet Washington the swamp drains you.
Find an use case in a program that you use and dimple/improve it.
See writers block, blank canvas syndrome, musicians block... Sometimes it is intimidating to take that first creative step. Just jump. Once you start you often find you cannot stop.
Silence is a state of mime.
I have been programming since 1987.
My advice to you is to find a free software project and start fixing bugs.
[Aside from poor communication skills] fixing bugs is the skill that programmers are the worst at, and help with fixing bugs will make you well liked. Just be nice about it. All software has bugs, and no malice is ever intended by buggy software. All software is buggy, and the most experienced programmers will own up to their bugs and be happy that you're volunteering your time to help fix them.
Find a not for profit organization. Find out what they need. Build it for them. You get problems to work. They get something they need. Win-Win.
It doesn't matter what it is, or how it fits into anything, just identify something which annoys you and make it better.
Curtains don't open when you wake up...
Traffic Lights seems I'll times...
Having to specify times on the microwave when it can easily measure weight...
Windows wants to update to latest version...
KDE doesn't integrate with Office 365...
Your Company is using Office 365...
The Digital Sign-age at the Airport has a brief 0.5s black frame between videos...
I can get a lift anywhere I want by pressing a button on my phone, but I need to wait 20min before a waitress takes my food order...
Then just sit down and learn enough until you know how to make it better. Then make it better.
The reason you became a programmer is because you see patterns in the world, and can imagine a way to make those patterns more efficient. You don't need to revolutionize the pattern, just make it better. Linus Torvolds never revolutionized operating systems, he just made the development process around them better.
Replying to undo moderation mistake. But, I tend to agree with this. I have so many little things I'm curious about, and write little solvers for. The Monty Hall Problem simulator, A program to find the best possible Words with Friends word given certain letters, etc.
If you want to write FOSS, but are too scared of screwing up someones code, check out some of the alternative OS's out there. Haiku-OS, MenuetOS, Plan-9, etc all need even the most basic programs. Be it system or client code. GUI or non GUI. In many cases this allows you to "reinvent" the wheel which is a good way to learn, while at the same time not being unproductive by working on yet another text editor or what have you.
"Syntactic Structures" then design a compiler for your own language..
That's why I became a DBA. I am truly a programmer, but because I enjoy it and it's my hobby, I was getting burned out doing it for a job AND a hobby. Now I love it again, as a hobby and side business.
I'm self taught and have the same problem. My solution was and is to keep reading. I rarely do exercises and I can't bring myself to code to no end, because of
opportunity costs, I've done some stuff here and there as I needed (scripting mostly) and just kept reading. Read textbooks, OS stuff, computer architecture, algorithms and math. The problem is that the stuff I need has been done and is at my fingertips, and though I could re-invent a wheel or re-implement a library, I learn well through reading books, and books open up new vistas and raise my ceiling. I've always thought, that when the time comes, I'll have a good enough background to go deeply into what ever I'm being paid to do.
If you are looking do it for a living, this method can if fact work. I didn't know that until recently.
I had been working in app support when started learning this stuff, after a couple of years I got access to the code base and would read it to solve bugs that hit the help desk or answer obscure questions about how things worked when we got them, at some point I felt confident to ask for some write access and a mandate to spend time working on stuff. It took a long time to get that but at some point it happened and now, guess what, I am professional programmer. I am still reading though. Now I see that the lack of practice didn't hurt me at all. Sure I had look up syntax, but the IDE either writes or reviews all that stuff for you and unless you are thick it seeps in after a while.
Learning by doing is critical but if you only learn by doing you will end up learning very little (unless you have much more time than I do). You'll get the practice when you'll need it and you'll get good quickly if you have the right background.
so if my experience speaks to anyone out there, try to get a job in support, a stones throw away from the development. As soon as you can read code, try to get read access to the code base. When you are comfortable, agitate appropriately for some write responsibilities in down time, even for no extra pay.
As the old saying goes, "necessity is the mother of invention". So most non-work programming I end up doing is writing short scripts to automate or simplify things I'm already doing on my computer at home. Any serious project will require a serious time commitment, and I have too many other things I really want to spend my free time doing, such as going outside and hiking.
Honestly, I wish I did have one day a week where I could get paid to spend it doing some self-directed programming, such as working on an interesting open-source project, instead of the boring crap I usually have to do for a paycheck.
Or make a bot to troll ./. Like everyone else apparently...
Programming is a valuable skill. Think of applications you could create that would help the disadvantaged.
A web app that let's low income people locate inexpensive local produce.
Web beacons for the elderly that trasmit a url containing contact and health information.
An easier way to donate money to the homeless electronically.
Every hour you spend on completing personal projects like these is more valuable than random anonymous cash donations to charity.
Completing them is the key word here though.
(Comment) For all the predictions of AIs taking over programming, this is about where they are, and will be, for the foreseeable future.
If you want to rewrite a library, then you can gather lots of attention for yourself by recreating a GPL library (with mods/improvements, of course) and making it BSD: readline would be a good example. The best part is that the ones who won't be wanting to tar and feather you are also the ones who might actually pay you.
Get over it and find a good architect.
Are you fucking serious?!? *sigh* Sorry I lost my temper there. Ok, let's assume you really meant the above.
[Nearly] any time you are working in a new programming environment, or trying out a new graphics library, or learning a new language, or if you're just plain a new programmer, do this:
Clone Asteroids. (Or Space Invaders or Pac Man or Tron-ish lightcycles / snakes. Or some other ancient classic. Whatever floats your boat.) You don't need to invent a game, just sort of copy some fairly simple one as an exercise. Spend 3-4 hours on it.
I don't mean to trivialize the question, but .. wow. This one is just too easy. I bet I have made at least a dozen totally-shitty semi-functional Asteroids ripoffs over the decades (nearly all of them lost to time, but don't worry, nothing of value was lost) on various platforms in various languages, and I just sort of assumed that everyone does that. No?
Wait, maybe that's it: you're not worried about it being totally shitty, are you? Don't. Just do it. Let your game be shitty. You're just learning (and looking for API surprises), not trying to create a product or anything serious. Better ideas can come later.
I messed around a lot before having paying work (you know a 9-5 job) but frankly it was a waste of time. Having actual goals and extrinsic motivation (food) makes a lot of difference and without that (food ... I had no trust fund!) you get into a cycle of need that is tough to exit.
I understand that the current fad for employers is that you must be magically in the top 5% of programmers before you can get hired but this is really stupid and likely impossible for normal folk.
You Died
Pair up with me. I've got tons of things I'd love to program but can't dev them.
and write code that implements it. For example, if you want to learn more about cars write some classes that describe the car components. Start off with a very basic, high-level operation and then get more detailed. As you learn more about cars you can enhance your code to better describe them. Eventually you will become smarter in two areas.
So let's say you where born a long time ago when it was customary to write code in assembly. You're bosses tell you to write a shit ton of assembly code for a bunch of different types of computers. If you had some imagination, you might come up with the idea to create a programming language and compilers that turn programs written in that language into assembly understandable by any number of different computers.
Or you might just keep writing assembly code. And if everyone had such a lack of imagination, then not only would we never have invented compilers and programming languages, we would have probably never invented computers or any sort of automation at all.
If you are going to wait for marketing people to come up with these kinds of ideas, you're going to be waiting a long time. It doesn't take a marketing genius to recognize the utility for a tool yet to be invented. All it takes is the ability to recognize when you want something that doesn't exist and realize that you are capable of making it exist, and a little motivation and pride of workmanship.
"... they will come" & You'd be surprised who else needs it too.
When I did APK Hosts File Engine 9.0++ SR-4 32/64-bit http://www.bing.com/search?q=%...
I created it originallly in 3 parts in 1999-2003 in charactermode/tty term/DOS console work & then put it into a GUI app as that IS what users really want including me!
I kept it to myself circa 2003-2011 out of respect for webmasters making a buck as 1 part of how it speeds you up is adblocking!
Then I released it in mid 2012 after "malware explosion 2011" & due to ADVERTISER NEGLIGENCE in 'malvertising' infecting millions worldwide!
It's gotten SO MUCH DEMAND Malwarebytes' hpHosts site had to create mirroring servers + AMAZON servers for its downloads + data draws daily!
See subject: Many here mention "solve a problem" - that's key to it.
APK
P.S.=> Some wares I've done since are parts of successfully sold commercial ware via certified Microsoft partners - If I can do it? So can you all... apk
Once comfortable with your programming language of choice (for example, Python) seek out API libraries for the language that are geared to a second interest, such as graphics, user interfaces, math, maps, needlepoint patterns, or whatever. My limited knowledge of (but great interest in) music has been enhanced by digging through the PythonInMusic wiki, plus studying the excellent book (with associated code library) "Making Music with Computers" by Bill Manaris ISBN-13 9781439867914. Rummage around on the net to find the intersection of your personal area(s) of expertise or a nascent interest with your coding language. The things you find interesting outside of computers all generate some sort of data. Work with it.
... and then write software that solves a problem that needs solving. Maybe throw in a little graph theory while you're at it. I learned this stuff in grad school and it really opened my eyes to what can be done with software and algorithms.
The subjects in the title teach you how to model "constrained optimization problems under conditions of uncertainty". In other words, mathematical models implemented in software that helps an end user or the software itself find the "best" of something according to their needs.
The subjects require basic algebra, super basic calculus, and a little matrix math -- nothing too heavy -- and many cheap dover books can be found on the topics. wikipedia is also your friend here.
Saying all that, the code monkey comments are spot-on. When you do it for a living you are going to implement what your boss wants you to implement.
ugh. the title got chopped off. it should read:
probability theory, stats and *operations research*
I agree, but the weekend should not be about work.
Some of the advice here seems pretty bad. Download a CS paper and implement the algorithm??
SHORT ANSWERS:
* https://www.freecodecamp.com/
* http://thecommunitycorps.org/
* meet-ups
* internships / apprenticeships
LONGER ANSWER:
Find a real project, and try to pair with someone. Best way is via the websites above, unless you know someone.
e.g., You find out a local soup kitchen needs a website. They could also use an app to register incoming folks (one soup kitchen I volunteered at asked for name, age, and number of kids). So you build a WordPress site and write an Android tablet app or something.
BENEFITS
* You learn the whole SLDC, especially users and requirements gathering
* There's so much more to programming than code. Databases, testing, etc.
* Might get a job out of it.
auditing existing spyware would be more useful
google analytics and windows 10 global mother fucking spyware for example
Rewrite gimp using the Qt libraries.
Contribute to civilization: ari.aynrand.org/donate
I know how to write, but I don't know what book to write.
Assuming there's already years worth of work done by the "giants" you'll be standing on to make colors appear on a screen using your language environment.
Then, if you're of the libertarian bent, claim superiority over mankind. If you're more liberal, don't pull the ladder up behind you like the fuck face libertarian.
http://c2.com/cgi/wiki?Dynamic...
I always wanted one.
These fuckers have no business being programmers if they can't figure what to program.
P (!)= NP is a good start
Computer Vision
How about Artificial General Intelligence?
Why not write a small utility that may do something similar to sometrhing that already exists (let's face it, almost everything has been thought of already!) but does it a better/easier way?
For example, I always hated the syntax of sed (regexp's aren't easy either) and it missed quite a few features I'd like, so I wrote "replace" instead:
http://hpux.connect.org.uk/hpp...
I also find "bc", "dc" and "calc" completely unfathomable, so I wrote my own "calc" (without knowing about the other one until well afterwards!) which actually has an expression evaluator based on BASIC (i.e. "obvious"):
http://hpux.connect.org.uk/hpp...
Neither utility is large and both were fairly straightorward to write and I use both quite regularly to this day, many years after writing them.
Knowing 'how' to program isn't knowing syntax, etc. It's knowing how to apply that syntax to real life problems an scenarios. Many people seem to forget this. To put another way, if i ask you to build a bridge, it doesn't matter that you have all of the tools to build a bridge and know how to use those tools, can you actually build the bridge is the problem at hand.
Sorry to take the negative corner here, but perhaps at least part of the problem is that there simply are too many programmers in the world. Or perhaps I should say, too many people who only know how to code - all the real problems that could be solved relatively easily with a naive approach, have already been solved. We are now into design patterns, frameworks, artificial intelligence and so on, and they all require university level education to really understand. And another problem with this technology is that it evolves so fast - if you are at the start of an education and are interested in one of the current big things, by the time you're ready to get a job, it may already be dated.
I'm in the same position. Challenges are just games and I've done them all in different languages I tried to master. Open Source projects are nice but are often just a step in the learning process and I've nothing to learn at those levels I'm allowed to contribute.
It takes too much effort to become one of the leading programmers/designers of an open source project and even then, it's not really 'your child'. I would love to start my open source project, but what should I make?
My creativity in computer science has faded away. I'm fed up with computer science. There isn't any science in programming and software architecture. I'm a scientist at hearth and would like to do scientific research. The degree computer science is misleading. I think 99,9% of the computer scientist become just glorified programmers.
I've lost connection with the computer world. I don't see any real progress in: "main frame program but on a desktop", "desktop but in a write once run many language", "desktop but on the web", "desktop but on mobile", "desktop but in the cloud", ... And with every iterative boost in processor power, computer programs become less and less efficient. With every increase in processor power, the bloat and amount of errors increased. I would have loved to be able to work as a scientist to try to make programs error free, use less resources, optimize algorithms. But it is all wasted time because the time to make software more efficient is a lot larger than the time to double the processor speed.
The software crisis is still real, but circumvented by the fabulous increase in process power.
If the OP does indeed have the chops to be a good programmer, but lacks any inspiration for any type if 'new thing' to create, the answer is simple.
Get a job.
Get a job where someone with an idea or inspiration has defined what they want, and has out-sourced the actual coding to make the thing a reality.
Inspirational genius is rare. Uber-skills in programming are rare. A single person having both is ultra-rare––when it happens, it is always the product of a great deal of hard work and incremental education in the two areas. It is only then that one can even think that they might be capable of creating a master-work.
How is this not obvious to everyone?
I have the time, but I don't have the health to program... Can't lead the sedentary lifestyle anymore.
I know how to write but I don't know what to write
I know how to walk but I don't know where to go
Maybe we deserve this world ?
You're bosses tell you to write a shit ton of assembly code for a bunch of different types of computers. If you had some imagination, you might come up with the idea to create a programming language and compilers that turn programs written in that language into assembly understandable by any number of different computers.
Well, yeah. That's what programmers do, right? They come up with elegant solutions. That's where all my imagination goes. But who provided the task? In your example, "bosses" provided the problem domain.
When I get a spare moment on my weekends to do hobby coding, I get coder's block. I'm not an idea guy; that's for marketroids and designers. I just want to be pointed in a direction and I'll code my ass to it.
I don't see why you are so WTF about this. This is what the guy is saying. He's a "codemonkey" and doesn't have an idea about what to code in his free time. It sounds like he wants to solve problems with is code but can't figure out what problem to solve. It's like the mechanical engineer thinking he'd like to invent something, but just figure out what to invent.
Assuming you're not working as a programmer, get involved in an open source project or a charity. I've come up with all sorts of ideas for programs as I've worked on other programs. "Gee, this task would be so much easier if I could..." Working with a local non-profit in my spare time, as I got to know their work more in depth, I came across several programming needs that I could and (have/am) filled. "We really need a program to do ..."
linquendum tondere
That's what the submitter is saying. I agree with him. I am WTF'ing about the (-1, Flamebait) GGP saying you're not a "real" coder if you're not just brimming to full with ideas of what to code.
Then the hard part becomes affording a lawyer to find where "without cloning it to the point of [infringement]" is likely to lie. For example, the featured article recommends porting Tetris, but The Tetris Company is known to patrol Google Play Store and has successfully sued a cloner (Tetris v. Xio).
If you really need it and no one else will do it, then you gotta do it yourself. So you gots to learn how to get it done.
Kind of backwards, isn't it?
But when everyone else is "too busy" getting by and it needs to be done--what choice have you got?
This old adage comes to mind.
Tracy Johnson
Old fashioned text games hosted below:
http://empire.openmpe.com/
BT
Here's a project. Model how any small part of the Interplanetary Transport Network works. Then please send it to me. Here is a paper to help you get started: http://www2.esm.vt.edu/~sdross... Have fun coding!
Providing tasks is easy. I don't go to work to have tasks provided to me. I go to work because that's where I can get money from. I am perfectly capable of providing myself with tasks (and I do), but those tasks don't come with a salary.
When the Lord created Cyberspace he filled it with programmers who know how to create software and managers who know what software was needed and then he sent his only son Jobs to teach mortals what software should look and feel like.
> then not only would we never have invented compilers and programming languages
Except that this is not at all how we got compilers and programming languages. Hell cross-platform support was a benefit to these concepts that wasn't realized or deemed important until well into the second generation of compilers and languages. The original motivation was pure marketing. To get businesses to see the value of computers, they would need to be able to use those computers for their specific needs. There wasn't a huge stack of available generic software yet - nobody knew what an "office suite" may contain or even conceived of the concept. So how do you get businesses to want a computer ? By making it so the owner of the business can use it for whatever he specifically needs. To do that - you have to lower the barrier of entry for applications programming. The person who came up with a solution was Grace Hopper and she wrote the compiler. And no surprise the language she invented to compile with it was COBOL - a language designed so executives used to filling accounting and HR-style forms could write code in a familiar environment.
Most later programmers would hate COBOL but it survived for decades due to it's executive-friendly nature. It also proved that the concept of high-level programming worked, and that's when the hacker types started writing their own compilers for languages designed to fit their own needs better.
The idea of compilers as a way to avoid rewriting machine code over and over didn't truly hit home until 1969 when K&R invented a high-level language close enough to machine code to write operating systems in and used it to create the first Unix.
Your point is perfectly valid, don't get me wrong, but your choice of example was terrible. I agree that solving personal problems and making your own work-life easier is a hugely important source of ideas for what to code - it is also where by far the most rewarding and fun part of programming as a career happens. But the other side is paying the bills. Getting people to pay you means solving THEIR problems which they already identified and which may be something that YOU would never experience. That's often where the worst part of our job lies, it's often drudgery (not always - some clients/bosses will present you with truly interesting challenges but often). And compilers and programming languages were solidly born from the latter. Hopper's lifelong passion for computers led to many breakthroughs but she invented THOSE two to ensure that computers would survive post-war. They were created to turn war-machines into business-machines - to open up new markets so that the industry she loved to work in would thrive and people like her have would be able to get PAID for working with computers.
A better example of what you describe is actually Kernighan and Richie - but they came rather later.
Unicode killed the ASCII-art *
My example was hypothetical.
No single person invented the programming languages/compiler. According to wikipedia, Grace Hopper wrote the first compiler in 1952, but it was for the A-0 language, not COBOL.
Also according to Wikipedia:
At the University of Manchester, Alick Glennie developed Autocode in the early 1950s. A programming language, it used a compiler to automatically convert the language into machine code. The first code and compiler was developed in 1952 for the Mark 1 computer at the University of Manchester and is considered to be the first compiled high-level programming language.
and
The FORTRAN team led by John Backus at IBM is generally credited as having introduced the first complete compiler in 1957
Like most advents in computer science, this one seems to be furthered by a lot of different people over a long stretch of time, especially if we include the people like Turing, Von Neumann, etc. I am not trying to say that business people did not help to foster this field/industry where these big (not and not so big) names in computer science could thrive. But I credit the people who came up with the solutions to the problems as being the "idea people" , and not the people funding them.
Every major invention in human history appears to have been simultaneously and independently invented by at least 3 people at the same time. I personally maintain that invention is a natural consequence of the state of human knowledge at any given moment. Once the next step becomes possible - multiple people will take it.
Though I was not aware of the other claims to the compiler - their existence does not surprise me in the least.
Unicode killed the ASCII-art *
Yeah, learn Assembler to appreciate how a CPU really thinks. But do it first in dosbox, with 16 bit assembler. Learn the read/write commands with DOS or BIOS interrupts. Then learn how to use the program stack and the status register to your advantage. Learn to do shift with carry or rotate with carry, add with carry, all that jazz. Learn how to write pixels on your screen by going into graphics mode, and trying to write a slanted line, pixel by pixel. Write a random walk in graphics mode, pixel by pixel. Enjoy.
--Take a look at the OpenBSD codebase and learn how to code without leaving a bunch of security holes.
.
== WolfriderV6 == I'm willing to admit that *I just might* be wrong... Are you??
Create a game that simulates our present mess of politics. A social structure game, in which goals are established. In which one can propose a law to achieve such goals. But others will attach riders, and amendments to alter aspects.
Replicating aspects of our present congress. You vote for Bill 123, but your constituents are told you voted for a tax cut for the wealthy. But hey, that was attached to a bill funding renewable energy research. Etc.
Such a game could create really fun social structures. While at the same time educating Americans on how screwed up the political system is. Oh, and how to make it fun???? How to separate it from reality?
Make it take place in space...... "Galactic Senate"......you're given an alien race, perhaps a single planet, perhaps many planets. You have resource needs, political boondoggles, crisis, etc. Every player's race has different variables.
Such a game would be a blast. It might replace "You've died of dysentery." with "Your bill died in committee."
So there is an idea....if you a few of you dedicated coders want. Message me....I can expand this, and hey....we can have some fun.
Some of the best authors and story tellers are atrocious writers. While some are amazing editors but can create a story. And often these work together and give us some of the best books we've read.
Write..."clone" of existing tool. See this is the problem with our industry. Those who are best at programming are often introverts, very focused, task oriented. Those of us with ideas, are often challenged to follow through and complete. The result is numerous products, by small to billion dollar companies that suck. (EXAMPLE: Amazon Kindle Fire kid management tool allows you to set different time for weekdays (M-F) and weekends (S&Su). Problem, that is NOT what parents need. Parents want to allow their kids to use their tablets later on Fridays and Saturdays, Sunday while being a weekend day is in fact a SCHOOL NIGHT. How do billion dollar companies with crap ton of developers miss these things? Why did it take Apple years to implement location based alerts. Etc.
The problem is that our engineering and development is tied to our innovation paths. But innovators often make poor engineers and developers. Steve Jobs is renown as an innovator, but he was rather sub-par as an actual engineer/programmer. He had Steve Wozniak by his side, Wozniak was a good engineer. Steve would have an idea, he would see the need, the presentation the means of accomplishing. Wozniak would engineer Steve's solution into existence.
Sadly, most companies fail to recognize this need. And the result, a lot of crappy sub-par products and innovations coming out decades later than they should.
I remember a great example of this was me sharing ideas I had with two physicist friends of mine, who were quick to dismiss my idea as not being feasible or correct to the laws of physics. But then my ideas and concepts spurred them to consider how my idea's concepts could be applied correctly to physics. Essentially, I had an interesting concept, but you can't get there from here. But gee, he could use that instead to get there and that might just work.
These are the dynamics that are lost in our modern workspace environments. Those with skills lacking inspiration, those with inspiration not being wired with the focus and constraint needed to complete a project on their own.
Yet, when there are pairings, Steve + Steve....you get jobs and wowz!
Most people have the opposite problem. They know what they want, but don't know how to make it.
The problem described doesn't exist. I think everyone knows something they want, but most of us also know that we don't know how to make it. I think the primary problem with beginners is knowing the limits of the competence with the tools available. I agree with the post on this: "you will write LOTS... not just one!" Because those who write just one are not programmers and probably made something nobody wants anyways.