Ask Slashdot: Best Way To Jump Back Into Programming?
First time accepted submitter FractalFear writes "15 years ago I was programming in BASIC, and doing some C++, after a serious car accident barely making it out alive, my memory went to crud. I have no recollection of how to do anything in either of those languages any more. I've suffered some damage, and my memory isn't all that great. However if I do repetitive work it sticks to me. I've been in IT for 17 years as desktop support, and I fear I won't ever get much further in life due to my handicap. I am hard working and dedicated, I have been reading slashdot regularly for many years now, and I have faith in the Slashdot community advice. I recently bought Head First C#: 2nd Edition(A friend of mine that programs for a living suggested C# as an easier alternative to C++) the first 4 chapters were great, but after that everything just didn't make any sense. My question(s) to you guys is: What was the best way for you to get back into programming? School? Self taught? And what would be the best language for someone like me to get into? My goal is to make games as a hobby for now, but would like to enter into the market of XBOX Arcade, Steam, mobile etc, particularly 2D TBSRPG games like Shining Force. If you prefer self taught what are some really good books you suggest?"
That may actually give you an advantage. Best advice is simply start programming. Pick a project, and work on it.
Give Learn python the hard way a go: http://learnpythonthehardway.org/book/
It is a collection of small exercises that build your knowledge and confidence with python, and you can ask the author questions on each page as you progress.
While I can't say for sure because I don't understand your situation fully I would suggest focusing more on a method of learning that works well for you rather than a particular language. It's much mroe important to learn the ideas behind programming and apply them to whatever language you would need to do some work in (again I'm not 100% sure if this idea will work in your situation depending on your memory) I am a programmer myself with a terrible memory, I can't just remember things like if A then do B then C then D. But if I understand something then I don't really need to remember any specifics, so i learn why if I see A then I should to B then C then D rather than jsut commiting it to memory. This results in slower initial learnign but in then end I think it is better, atleast it is for me and I'm thinking it might be for you too.
I would start with something that has a good teaching system, maybe something like codeacademy.com . Yes I know code academy doesn't have the best languages to learn (though they did just add python which I would suggest) but it will teach you the important things that everything is based on. OOnce you understand those you can move on to a particular language with a much better chance of figuring things out.
Good Luck
Something simple, for example working out orbit periods, camera f-stops, ie. something you've an interest in. You can pull the basic maths from wikipedia articles. Then you can work on writing the code around them. From there you you can learn how to use GUI elements to make it fluffier - you can use datatables to display the results, GDI+ to draw graphical representations of results, etc.
Personally, I've always found it difficult to learn a new language by just reading about it and trying to follow examples. By having a target, no matter how simple helps me learn a lot faster. For example, I came across Kerbal Space Program a while ago, so I decided I needed some help planning orbits, transfers, etc. So I read up on orbital mechanics and wrote a couple of tools to help me visualise how to do things. In that case I decided to use Javascript because it was quick and dirty. It was also a great opportunity to learn to use the HTML5 Canvas to draw the Hohmann transfer diagram.
...then why don't you start with that?
There are some really great tools out there to get the ball rolling quickly (like Unity or Game Maker). I'd say: think up a simple game, make some designs and get cracking.
Pretty good is actually pretty bad.
You cloud try learning Processing, the reason I say that is because just like back in the 80s you can type something quickly and see some results, I'm thinking it would help you get into 'the zone' again quicker as you have a very fast and visual feedback loop on what you do.
Learning Ruby might be a good language as well as you have less boiler plate than languages such as C# and C++ etc.
From there you can jump to something else if you want to.
"Because we are not employing at entry level, offshoring will kill our industry stone dead."
If you are reading this book and ... feel I'm insulting your intelligence... Go learn Lisp. I hear people who know everything really like Lisp.
LOL. It's true...
We do.
Python may very well be the gateway drug you're looking for - it's definitely one of the paths of least resistance (back) into programming: the syntax isn't overly complicated, the interpreter gives you immediate feedback, you can learn it on your own at your own pace, and the combination of Google + StackOverflow seems to work unusually well for finding answers to common questions. You can do quite a bit with it - 2D turn-based strategy RPGs are certainly within its power, as are more complicated games. Most importantly, at least in my experience, Python is *fun*, certainly more so than C++ or C#, so your chance of sticking with it and actually finishing something you start is much higher.
If I were trying to build an Apple ][-like machine in 2012, I'd build in a Python interpreter.
That sounds fairly ambitious but best of luck to you ...
If your handicap is a poor memory then I would suggest that you try self-taught initially as you'll need to find YOUR own way to learn that will work for YOUR memory - I suspect the school approach of memorise to pass exams would be a major disadvantage.
If that really doesn't work then I'd consider why ... if you are hampered in your ability to structure the learning or just genuinely need more explanation of the content then I'd go the schooling route.
do a computer science associates at a community college, it should be pretty cheap, something like 2-4k which is nothing comparatively speaking. it will give you the foundation you need to learn the rest on your own. it will teach you the theoretical stuff most self-taught people overlook but without busting your balls on diabolical exam or homework questions the way a more elite four year program might. plus you can put it on your resume, sure, community college is nothing to brag about but hey, if you know the equivalent of a AS in CS why not get credit for it? might even get you a pay bump in your current work.
I am trying to get back in, I got a degree before object orientated was big so I have to unlearn. I also have trouble remembering, but repetition is getting it into my head.
After much experimentation I recommend a combination of two sources
The New Boston and Learning Java
This article is right where I am, so I figured I'd chime in.
I was in a motorcycle accident about 5 years ago, and knew 5-6 coding languages previous to it. After (because of head injuries from being laid down by a truck sideways), my memory was completely gone for 6 months or so, but came back. Now, my memory is there mostly for long term, but short term is the largest of issues.
It sounds like this guy has the same problems as I do, and I'm going to assume a slight bit of forced ADHD because of that. Anyway, what I find is if I give myself tiny projects to bite into so my mind doesn't wander then everything works out. The key is always for me to take small bites, and once my brain's wheels hit the road (so to speak), everything is good. Personally I think it's because of the short term memory deficit not allowing the instant memories to feed the desire to learn as much. Once you force them into place by anchoring long term memories, it becomes part of you.
-- This space for lease, low setup fee, inquire within!
The best way to learn to program is to actually do it, so I echo the other posters when I say to pick a program and do it. Python is a good language to learn, It makes sense most of the time, so it makes it easier to learn. Making a game of any type is a great way to learn. Just Tick-Tack-Toe even is enough to just to get your foot in the door. Once you get your first success, no matter how small, it will snowball. Good luck.
PS: Obviously...if you want to get into gaming then the language is pretty much decided for you, it's C++. Remember to READ THE C++ FAQ. /Lost in my own ramblings
No sig today...
I wonder if you are not setting your goals to high. I am sorry to hear that you had a serious car accident, but you should realize that if your memory has been affected, probably also your other mental abilities might have been compromized. Writing game software requires a lot of mental abilities, and if you can't make it further than the 4th chapter in "Head First C#", (I looked up the table of contents), I wonder whether you ever will be able to write some serious software. Maybe there is another occupation that could give you more joy than proceeding this route where you are going to meet frustration upon frustration.
That's PROOF that you have braindamage.
As evidenced by all the Python fanbois who didn't even get as far as "...XBOX Arcade, Steam, mobile etc." before posting.
No sig today...
I have been reading slashdot regularly for many years now, and I have faith in the Slashdot community advice. This is alarming. Your brain may be more damaged than you realize.
If you mod me down the terrorists will have won
I am very encouraged by your determination to bounce back
However, as one who is in this field for a long-long time, I have to tell you that the programming industry is no longer like what we had back then (I read your description and 17-years is considered as a long-time in this field)
I am not very clear about your disability, so I won't tell you what not to do
On the other hand, there are a ton of other stuffs out there, my friend, try them out, maybe those stuffs will suit you much more comfortably than what you had, before that accident
Take care, bro !!
Muchas Gracias, Señor Edward Snowden !
Give Codecademy's Python a try. It's fun and easy. http://www.codecademy.com/tracks/python
I think at this point, that anyone setting out in programming should start with mobile computing.
Nothing else gives you such strong immediate feedback, a sense that you are really doing something - even moreso than web programming (which is pretty immediate as well, but generally less interactive).
Start with whatever platform you already have, if you have a smartphone. If you don't have a smartphone, get either a Nexus7 tablet if you don't have a mac, or an iPod touch if you do, and go to town.
There are tons of free resources for learning programming on mobile platforms since it's such a hot field, lots of it aimed at really novice users so there's no content that would not lead you in as gently as you like.
Good luck, and I hope you can enjoy programming once more.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
As evidenced by all the Python fanbois who didn't even get as far as...
He's mentally challenged with bad memory, and you want him to jump in the deep end? What kind of bastard are you?
"I don't know, therefore Aliens" Wafflebox1
Creating a game is a big undertaking, I know, cause I tried and failed 2 times already and working on my 3rd time (new code base).
Anyhow, what the task have given me is a red thread, something to strive for, something to collect information about.
With a game, you can digg into every aspects of a computer, from Coding, process scheduling, website for the game etc.
You really do touch everything, there is always something new to learn.
Find a language that you think is fairly easy, and learn it good, really good. Then use that one, and dont let anyone tell you otherwise.
There are languages that is better for some tasks then others, but most tasks has been done in all of the available languages, so its all up to your knowledge of that particualar language.
For XBox, I would think C# is the most common one, atleast for Indie developers.
Looks easy enough to start with actually.
If the goal is to start programming again, why not use one of the easyer languages, like Visual Basic, Python.
If the goal is in the end to program your own game, look into C#, C++, C
I learned to program myself, got work, went to school, went back to work. :-)
People at work come to me when things needs to be really debugged, cause I know the low level stuff, most that I have pickedup during my research for my game project. So even if I never gotten anywhere with the project, it secured my work
I hope this post gave something.
Except that MS hasn't dumped .Net at all - that was uninformed FUD and bullshit from the usual people. .Net 4.5 is about to hit, .Net 5 is under active development and .Net (5.5/6) is being talked about. Anyone learning C# right now is as safe as any other language.
Hi, in my humble opinion,
the easiest platform is the browser,
you build the interface by html (not a real programming language, but a "building pages" language)
then you can integrate programming intelligence in many ways
PHP server side technology probably is the smartest and more simple even in complicated tasks like integrate DB etc.
there are many books or tutorials, but a good fast starting course in my humble opinion can be very helpfull,
best wishes!
marco
Why not start with Java for Android?
There's a really nice API, OpenGL, and a pretty decent distribution network for you to use (although I think Google's cut of Google Play sales is too high).
Then you can segway into C++ as you feel comfortable, through the NDK/JNI.
Start from your own strength! You have a handicap and you know the kind of support someone like you need. So do a simple game to help you remember things. Don't be too ambitious. Do something really simple that works and build it out in small stages, always keeping it working (google "agile" if you want to know more about this way of working). Perhaps look at memrise.com for inspiration and think about how you could enhance something like this for someone with your particular issues. Think of special areas, there is more to remembering then vocabulary(people, situations, sounds, music, procedures, short term vs long term) . Think about how in what way a game could support a particular problem YOU have. When you have a prototype (even a simple one) you might be able to get support, since having the handicap yourself will give you a great story and in this way you can turn your handicap into a a real advantage. Perhaps you will even be able to partner with someone that can help you with the bits that are too specialized for you to do handle yourself. But to get that you first need a prototype game. Most important of all. Have fun developing it and try to find someone you can show off when it works! We all need this! In this way everything else is a bonus. Dan
Processing would be an option. It's basically Java, but gives immediate feedback like s script language, and it's visual, which makes it fun to learn because you see immediate results, and if you want to make games it may be a good fit.
http://www.processing.org/
http://www.openprocessing.org/
"When I first heard Daydream Nation it quite frankly scared the living shit out of me." -- Matthew Stearns
The best way to get back into programming is definitely not programming for games. Though seemingly accessible there are a lot of complex pitfalls that come with working with graphics, sound, and even simple text that has made many a neophyte programmer throw their hands up and turn to totals different paths in their life.
Python is a fine language, but imho not a very practical one. C# is a much better language and, if you insist upon doing something graphical it is probably your best bet on getting a simple GUI assembled (Java isn't bad their either). Nothing is going to reduce the complexity you are seeing in C++ though, all modern languages you'll find to be very similar in their fundamentals.
Personally I would recommend putting together some kind of inventory system as a first multi-day project. Maybe keep track of everything in your fridge, persist it to a database on your computer, retrieve it and manipulate it. Have it automatically generate the next week's shopping list as you change the values. That'll get you working with a lot of the data objects you'll need to understand. It'll also get you learning and understanding some simple APIs that other programmers have put together, that'll be a critical piece of any future success you'll ever have in programming. Using and adapting something other authors have created is part of any project.
I personally think that it's time for you to move on to other areas of game design. Anyone with a decade or more of experience should be able to eventually get into project management or possibly something in the design areas of gaming as that uses less of your wrote memory areas of your brain and more of your creative areas. A project manager or level designer (as examples) can also keep (and is expected to) copious notes. So you can use your job to minimize most of your impairment's problems.
Plus, you'll have less stress and make a lot more money. The only reason anyone, and I really mean ANYONE would be a programmer these days is because they are either planning on making the next great app that takes off or they are planning on working for a major company in internet security or the like or a government institution (Nasa or similar). The other jobs are too much stress and too little reward.
It's very tough for anyone trying to pick up new skills when the short term memory is affected
Soon as you start to get used to something, your forget and have to start over, and over, and over again
I have a relative suffering the same thing and have been trying my best to assist her in getting herself back into normal life routines, again
Muchas Gracias, Señor Edward Snowden !
I just started reading a book called "Think like a programmer" by V. Anton Spraul. The title pretty much gives the content away, and after reading roughly the first quarter I'd say it's a good read. The target language is C++, but that probably won't be too much of a hindrance. Keep a good C++ reference at hand and I suspect you'll do fine. The book is available in both hard copy, ePUB and Kindle format. I am not affiliated with author or publisher in any way.
C# is great, especially now that Microsoft has dumped .Net and moved on to their Next Great Thing.
What the hell are you even talking about? C# and .net still has a huge roadmap ahead and is in active development.
I'd be idea for one of those BIOS-writing jobs. I know x86_64 asm and a lot about operating systems and compilers. I could also work on compilers.
fuck that
The best way is often the hard way, you need to seriously spend time starting to do what you wanted to do: as you said in your own post, you should try to program games. You can start by programming a text based version of it and then learn the basics of graphics libraries ?
As long as you have the motivation and your passion/hobby, you will spend time trying to learn which is what differentiates the best from the rest.
My only advice to you is to stay realistic and keep trying. Find a community forum where you can get answers for your questions and try to make friends at conventions if you can. Meeting people in real is always better than random online acquaintances.
Don't you know it is now both immoral and criminal to think beyond the next quarterly report?
TBH, your goal should be to "understand" a language, not to "learn" it.
Not only is there a huge difference in the end result between the two, but there's a huge difference in the approach as well.
Once one of a class of languages is really understood, it's much easier to learn the syntax of another.
FWIW, I'm in biochemistry and hardly program at all ... however, I can't imagine that understanding Python is that much different than understanding German (which I've done in the last two years), which in turn makes understanding Swedish, Danish, Norwegian, Dutch and Afrikaans much easier (understanding is very easy, however speaking them is more difficult).
Regardless of what coding you are picking up, you should be training your brain to re-learn the things you need to become successful at coding. You'll need some games/stimulants/training to get that going and keep it a challenge. Maybe people here will know good (self)therapy methods for that? All I can come up with is Sudoku, but there must be more?
I was promised a flying car. Where is my flying car?
If you want to do programming professionally with the particular disability of not having a good memory recollection, I think you might want to look into languages that have a limited scope. Having a limited scope means the set of structures and methods will be limited and thus repeated more often. You might not want a language that offers dozens of ways to solve a single problem, but one that offers just a few ways to solve many different problems. Popular languages like C++/Java/C# are very generic with a broad scope, but something like COBOL is a lot more limited in scope and still perfectly viable to find employment.
If you have no (immediate) professional intentions, there are a lot of specialized languages in fun fields (like games, graphics, music), even some purely visual " drag & drop" languages which tend to have a more limited set of operations. Something like FlowStone would be a nice starting point if you like electronics, or it's sister project SynthMaker if you're into music. FlowStone has the benefit of allowing Ruby code, which may be a step up into other areas of programming. SynthMaker has effectively been dead (with significant bugs) for a few years now.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
Exactly. Python has a few libraries available like pygame, pyglet, panda3d etc that would help someone ease into game development.
To the OP: I wouldn't try any C++ or C# game development until you feel you've made real progress with something simpler. It sounds like you'll need lots of small self contained projects you can succeed with. Ongoing success with small steps of increasing complexity is going to be better than failing at something too big and ambitious.
I suggest a MCSE.
"A door is what a dog is perpetually on the wrong side of" - Ogden Nash
As an employed programmer that does everything from reading hardware schematics and writing C, to writing server code in C#, and finally writing all our build scripts in Python so they will be cross platform... I suggest learning Python as a way of getting back into things. I work in a variety of environments, embedded/linux/windows, and I had to make certain concessions in my code to account for the OS running the scripts, but Python was very easy to pick up and create useful things. I've managed developers who are very particular about whatever domain they're comfortable in, but if I can get the windows guys to install Python 2.x I'm golden. Always use the best tool for the job, while Python is great, I don't use it to build my .NET projects. MSBuild is better suited for that, no matter how clunky and painful it may be. This post is a bit muddy, so I mean to say if you're writing anything for your own personal improvement, use Python. Once you get your bearings, you may have to adapt and learn something else. Programmers are craftsmen, we should be skilled enough to work with whatever tools we're given.
I've had *some* problems with remembering stuff before. It's not anything as severe as you're going through, and I wouldn't hope to imply that I *understand* what you're going through...
But, I hear you on memorizing through repetition. So, whatever you do, I suggest you plan on:
-coding many, many different example programs/functions.
-re-coding those different examples several times. Perhaps changing how you code them each time (or not - not a requirement).
There are coding problem websites on the net. They list example problems. Hopefully someone can supply a link...anyway, I'd just work through one after the other.
The language doesn't matter, the important thing is progress. Though...python is awesome. You can do procedural, OO, and functional programming within python. Plus, a typical python function is bound to be take fewer lines than other languages. And then there's ipython...
PS: I don't reply to ACs.
Many have suggested various languages, which is fine, but no one has actually told you how.
You need to evaluate your ability to solve a problem since a manager wont go beyond its basic articulation/description.
So, can you write a recipe? What steps would you perform to make a sandwich? If you come up with about 2 dozen
steps, you're on the right track. No, it's not silly - do you steps include a knife or a spoon for the spread? Lots of little
details but the sandwich won't really happen without them. Are the ingredients supplied or made? Stuff like that.
If you are successful, then decide the best vehicle (programming language) to perform those steps in. Write them out.
If you're about the age you indicate, your brain works best if you literally write those things out in your hand on paper.
Let's consider two sandwiches. Here are some of the (very simple example) steps and their associated detail:
Get four slices.
For each slice, do (slice = 1, slice less than or equal 4)
if slice is first, then ( num_slices modulus 2 is one)
place on plate
add whatever on slice (spread, etc.)
else
cover the last topping
cut sandwich in half (diagonal or straight?)
add tooth picks
end if
end for
Even as I write those, I see other steps. Another aspect is pruning. For our sandwich example, are you going to
eat it immediately after its build? Then the entire group of steps for preserving it are not needed/used. See?
My example is how I think; but you'll come up with the steps that match your experience and personality.
It doesn't matter as long as the sandwich is tasty and meets the nutritional requirements, you've done you job.
Good luck!
Get a tutor.
General suggestions for when you are thinking of learning a programming language:
Get a book to help you get started (I see that you have already done this). This costs you next to nothing and is the easiest to fit to your own schedule.
This is a simple way of checking something out so it fits you before making a definite choice. If you decide it's not for you you will have lost very little.
Find or create a project that interests you. The goal should be independent of language and useful for you. Keep it somewhat ambitious but attainable.
If possible portion it into smaller projects or small goals that are useful in themselves. This ensures that you maintain your drive to push on and learn more.
Once you have attained some knowledge you should look to find a course that teaches the basics, and if possible, some advanced topics.
This way you go in with some understanding of what you find easy to grasp and what you need help with.
You will be able to ask questions about the specific things that stumped you. It is also a great way to connect with others who are on the same page as you.
This is also vital in order to force you down paths that you would otherwise avoid; it is a lot harder to put off doing something when these are part
of your course and come with deadlines.
Give: You've got some brain damage and some handicaps resulting from that and what to get into XBox or some other sort of game development.
Your advantages: You've got life experience, a high frustration tolerance (so I'd definitely presume), are hard working and dedicated.
I strongly recommend that you join a modding crew inmediately, especially if you want into gamedev and you've allready gotten your hands dirty as much as you can with C#.
This would have quite a few advantages given your situation:
1.) You'd be infinitely closer to game dev right away than if you'd start out with scripting in some FOSS language on some obscure OS that only tinker-geeks use.
2.) You'd instantly be in a team with many people involved and could experiment with the areas that you're actually good at. If hardcore coding hurts your brain, there is tons of very important gruntwork to do, especially with game development. loadtesting, pipeline maintainence, protocol testing, app/persistance glue coding, scaffolding, rigging, technical direction, model cleanup, UV mapping (the last 4 are all 3D stuff), SFX testing, etc. Tons of stuff that doesn't need much of any nerdbrain superpower but a stable personality, a high frustration tolerance, dedication and at times the abitliy to give orders and be heard.
3.) If you are hard working and dedicated and have the life experience that comes for free with your destiny, you are an invaluable asset when it comes to motivation, discipline, planning and foresight. All things desperately needed in the modding and professional game development team. When a veteran like you speaks, the young and whiny wippersnappers usually shut up right away away, pull themselves together and get back to working on the next release.
4.) Non-trivial gamedev, as done with some of the modding crews, has so much to do, you can allways inmediately switch tasks if something becomes to frustrating and/or hard if your tired.
5.) Modding is the classical step-stone into pro gamedev.
6.) You'll quickly learn the real life lesson that coding is only a tiny, tiny part of a large projekt. Art, TD, production, HR, management, marketing chances are that if you are serious about your ambitions you'll quickly find a field where you are much more successfull and find much more satisfaction than what you'd find beyond chapter four in "Head First C#". I love coding, especially with Flash/ActionScript, but unless I get it into my head that I'll be earning infinetly more when managing and consulting and maybe doing a little ABAP and, you know, actually get paying jobs, I'm stuck with yesterdays tech, crappy pay and no future.
Bottom line: Don't try to do something you probably simply can't do. Broaden your perspective. The experience you got in coding right now is pointless if you want to be a XBox coder, it may be invaluable if you are a TD or producer. Don't forget that.
Good luck.
My 2 cents.
We suffer more in our imagination than in reality. - Seneca
used to be able to program ...brain injury....oh come on, I know you're all thinking it
Java is easy to learn for a C++ developer (Java is used in many university level introductory computer science courses) and it very widely used. It is cross-platform and has a vast array of libraries that gets you going across almost all problem domains (networking, hardware accelerated 2D and 3D graphics, web applications [GWT+vaadin are great], embedded systems, Android devices). Oh, and according to the Tiobe Index it has a lot more industry activity than C# (yes, yes, C# is used widely, but it turns out not nearly as much as Java).
With a pogo stick
Real men don't need signitures!!!
Sorry, what was the question again?
It's not uninformed FUD, it's uniformed wishful thinking. There's a difference.
15 years ago I was programming in BASIC, and doing some C++, after a serious car accident barely making it out alive, my memory went to crud. I have no recolection of how to do anything in either of those languages any more.
15 years? Seriously! You're giving yourself way too much credit.
Personally, it just takes me 15 days to forget a computer language, no head injury required. Plus, I usually only really know one computer language at a time (when I have to use other languages at the same time, I just cut and paste a lot).
If you want to rehabilitate your memory, quit your job, and get another one (hopefully, a different type of job, but one that you're still able to get, and one that pays the bills). I'm being serious here. Changing routines is best. Also while we're at it, changing employers is also the best for career advancement.
And be careful not to take refuge in computer games. I'm not saying this is the case here, but I've met my share of gamers who wanted to be computer game programmers. Of course, it stands to reason that a game programmer will have played computer games and that many programmers got into programming precisely because of computer games. The only problem I see is that many people that are heavily into computer games think they're going to find a way out of their game addiction, by making computer games, which unfortunately is not the way I'm seeing things happening these days.
One problem is that games are getting so sophisticated now, that the gap between the emotional pay off of playing a game vs. the emotional pay off of actually making a game is becoming much wider, and if my theory is correct, a heavy gamer would be unwittingly conditioning himself to become a poor learner and an impatient computer programmer by continuously playing computer games.
Which is to say, don't give up on your goal of making computer games, but if by any chance, you're heavily into playing computer games. Quit for a while. Get some other hobbies. Unplug yourself from the internet, even from Slashdot. Take a night class or two. And of course, get yourself into programming once again. Programming is certainly not the same as playing, and it comes with much smaller and less frequent emotional pay off's.
You memory is shot? Welcome to the modern world. I have a 2 second memory. I find that as soon as I think of something, the best thing to do is to immediately write it down.
The best way to learn to program is to actually program, reading books doesn't work so well, you'd have to remember each chapter as you go, and its easy to forget something that was so easily learned. He say "this code does this", you type that code, it does that, woosh, you've forgotten it.
Whereas if you try to do something yourself, and succeed, then you have a piece of code to refer back to to recall what you were working on, and the challenge of solving the problem helps you learn the techniques needed to solve similar ones next time.
Java and Android is my chosen programming language of choice now, prior to that it was C++ Windows. I've found Java has just been a doddle. Really easy. And once past the package res, service/app Android is easy too. C# ? I don't think that has a future, it never went beyond the MS universe and that universe is imploding into the black-hole 'Ballmer'.
If you have a goal in mind, something you are trying to write, then that goal provides test after test after test as you need to solve each puzzle to achieve the next part of the goal. Plus you can see the progress and that body of code exists for you to refer back to, regardless of whether you remember the detail of how you did it. I don't recall the last million or so lines of code I've written, why would I!?
Another trick is to write everything down as soon as you think of it. It helps when you have only a 2 second memory window. Also try writing stuff down.
Fundamentally, many programming languages are very similar. C++, C#, Java, and even scripting languages like Python and Perl all deal with the same basic concepts and constructs: objects, classes, methods, for-loops, while-loops. What differs is the specifics, and the available libraries.
Now, suppose you were going to the gym for the first time in years after an accident. Your ultimate goal may be to deadlift 250 pounds, but you certainly shouldn't start there.
If your ability to memorize new information has been compromised, then you'll want to start with a language that has very simple rules and syntax. So, avoid C++ and Perl for now. You could start with plain ANSI C -- very straightforward -- but then you'd have no formal object-oriented programming constructs, which is bad in this day and age. Java or C# will both be good formal languages to learn. And if you're into instant gratification, don't want to learn an IDE, and don't mind running things from the command-line for now, consider Python.
But above all, give yourself time. With practice you'll get there. Simple stuff now, games and graphics eventually.
Koans and fables for the software engineer
Sorry, but learning C++ is a bit like learning Latin. It is good if you want to understand the background of todays modern languages but really, there are so many better and well thought out languages these days that you shouldn't really need to.
I have excellent Karma and I am not afraid to Troll it.
... check processing.org or openprocessing.org
I've always had a bad memory and am jealous at how some people can remember all the syntax and patterns so well.
I've developed several strategies to counter this, which are actually very beneficial to any coder.
*
*
* @return integer A description of what is returned.
*/
myfunc() {
variable_description = calculateSomething(par1, par2);
return variable_description;
}
I do this because it places less of a stress on my memory.
In addition to this I have found that there is a benefit to having poor memory. Out of necessity I am constantly reinventing the wheel and often come up with novel solutions to problems. I do have to be careful not to duplicate work though and am constantly searching to see if it is a solved problem, both in the code base and on the internet. Sometimes I come across my own posts on the topic from a year or two before, that always makes me smile.
In short, you can do it and you can even do it in ways that will make you a better programmer than most because you know about your deficiency and are countering it. There are so many programmers out there that are ignorant of their shortcomings.
That makes it about 1997 since you had any ground-truth experience with the world of programming.
Here's a clue:
From 1997 until sometime in 2000, there was an explosion in programming jobs and an equivalent explosion in the number of people being imported from around the world, both in physical and virtual terms, to take those jobs. In 2000 the explosion of jobs reversed and imploded. The implosion, as in an atomic blast, was when the real damage was done to anyone not tied into an ethnic nepotism network. If you weren't lashed to such a network, you were blown away by the malestrom -- discarded. Those lashed to their ethnic networks took pay cuts, sometimes severe, but they usually didn't lose their houses. Since in the US, to be in an ethnic nepotism network that protects the interests of founding stock Americans is to be a "White Supremacist" and the government is more interested in rooting out "White Supremacism" than just about anything else, the end result was a catastrophic demographic shift in the programming industry that occurred almost invisibly and overnight. If you are a beneficiary of "white privilege" avail yourself of the only thing you really have going for you at this point: Social Security Disability.
Seastead this.
Wanting to do games? Try java+android+libgdx.
To recapture programming FIRST DO:
a) C Tutorial - C Made Easy: http://www.cprogramming.com/tutorial.html
b) C++ Tutorial, C++ Made Easy: Learning to Program in C++: http://www.cprogramming.com/tutorial.html
d) Java Tutorial: http://www.lynda.com/Java-tutorials/Essential-Training/86005-2.html
e) LibGDX: http://libgdx.badlogicgames.com/
You were in a car accident and have a brain injury as a result, so the first programming book you bought was called Head First?
FractalFear, I'm glad you're giving programming another chance. I've programmed in C++, Java, C#, and a handfull of other languages. I've read a lot of books on them, and I've spent a lot of my spare time tinkering with various snippets of code over the years.
What was really helpful to me was to pick a language (Say, C#) and think of some task. Like, a simple word processor with save/load capability. I would look up samples of that already written, download the projects and open them with an IDE (Visual Studio), and study how they do what they do, as well as what the differences are. I would then make changes to the samples, seeing what happened as I was tinkering. This is the easiest way to learn a new language.
Also, you need to study programming fundamentals. Classes, Objects, Inheritance, Encapsulation, Polymorphism, the whole Kit-n-Kaboodle.
Bonus points for learning GNU toolchain.
Read this book first: Moonwalking with Einstein, by Joshua Foer.
"My goal is to make games as a hobby for now"
And then he mentions a console platform ("XBOX Arcade", which I take to mean Xbox Live Arcade). Several Slashdot regulars have told me that the only way to sell one's game on a console is to move out and work for a console-licensed video game developer for several years in order to build what Nintendo calls "relevant video game industry experience". And they've repeatedly told me that the only way to sell a game at all in a genre traditionally associated with consoles is on a console.
Losing parts of your brain must suck real hard. A human is nothing without the brain, so you have lost pieces of yourself. But maybe you can use what you still have and push your limits. It's an immense challenge, but if your will is strong enough, you can achieve almost anything. Developing games, learning to program? Piece of cake. You still have enough brain power to post such a question here, and enough to be able to set such a goal for yourself as this. It should be enough to learn programming. You could draw inspiration from Stephen Hawking, who was able to excel in physics, despite having a broken body. If you can stay alive long enough, maybe you can live to have some future tech available to repair the damages in your brain at some time in the future. Don't give up.
OP mentioned games, and you mentioned multitouch phones and tablets as a target platform. What's the standard control method for making, say, a platformer on a multitouch tablet? In my experience, trying to play a platformer with an on-screen gamepad is like trying to play with a non-centering Atari 5200 joystick.
Actually I have lately started to be more receptive towards various certifications and degrees in IT. There's so many hacks and "fake doctors" around that it's nice to have something official to show. Not sure about the quality or meaningfulness of the different programs, but the general idea is good.
My take on it is that the first step is to pick _something_ and start working with it. I'm not sure whatever "it" is has to be the best language, versus training your brain to go through the mental process of programming again.
The $64k question is how your accident has impacted your mental capabilities when it comes to programming, so starting with something "basic" will give you the chance to start to work with a coding project and self-analyze where you might have some holes due to lack of knowledge or due to the accident.
That being said, the concepts and languages available now versus the late 90s are very much changed, so even if you hadn't had the accident, picking up something after 15 years would be a challenge, so don't be discouraged if it doesn't "click" right away!
I strongly recommend that you join a modding crew inmediately, especially if you want into gamedev [...] Modding is the classical step-stone into pro gamedev.
I'm willing to look into this, with a bit of clarification: Aren't most of the moddable games M-rated first-person shooters? Does one have to come to enjoy M-rated first-person shooters before joining a modding crew?
The best book by which I learned programming was this classic:
http://mitpress.mit.edu/sicp/full-text/book/book.html
There is also a video series to go along with this book by the best teacher I ever had. For someone who perhaps might have trouble learning syntax, Scheme is very simple. The book teaches mostly concepts which can then be applied to any computing problem. I cannot recommend it enough, though perhaps to a modern audience it might be deemed "too advanced", however the general approach might make it easier as you are given more the reasons 'why' something is done than simply 'how' it is done. Many people with memory problems can work better by seeing the purpose of things as rote repetition is more difficult.
For programming simple games in Scheme you could use the following which already has many examples built it as well as extensive documentation and code samples:
http://racket-lang.org/
Good luck with your endeavors! My advice is to go slow, as in learning anything the journey is half the fun!
If you are considering XBOX arcade c# seems to be the obvious choice. However going into games programming of course needs you to focus not only on your programming. But also basic linear algebra, shaders etc. Which makes it much to learn. But it's absolutely doable. I am guessing that you might have some problems with the Object orientation starting from scratch. Any programming language is a big hurdle to cross. But what I did when starting out was to pick a book (Object oriented programming from square one, in C++). This was 25 years ago.... I read it and tried. Gave up, picked up the book again failed. But the third time I did it it just clicked and I have had an easy time understanding any programming language from then on. So in short absolutely C#. In the beginning skip the Ui stuff and 3D stuff. After learning the intial stuff build a very simple tic tac toe or something like that with normal UI components. Then move on with for instance irrlicht as a 3D engine. You don't want to code your own 3D engine it takes forever. Good luck and have fun!
Hey, I was just paraphrasing the famous Clinton's words... :-)
But really, you should concentrate in what's relevant today, and it is the web.
No matter if you make desktop or mobile web apps, you need to know HTML5.
And that means: html (the markup language), css3 (the language that gives format to the html elements) and javascript (the only language supported in all major browsers).
Additionally, there are tools that make your work easier and that you must master once you got the basics (above). These are jQuery (a library to make javascript easier and more consistent).
You should also learn some javascript framework to structure your code for large applications (something like Backbone.js).
And if going mobile, there are plenty of frameworks too (jQuery mobile is a good choice).
But note that all of these tools are just javascript libraries to assist you on each specific task.
If you want, you should also learn another language for server side programming or non-web realated tasks.
My choice is python or ruby, because they are easy to learn, very powerful and flexible and FUN to use.
Forget about C#. It's death. Even Microsoft recognized that javascript is the language. Everything today is done in javascript. .NET community for that matter)...
If you don't believe me, ask the Silverlight folks what they think about it... (and all the
Java is well documented, and has classes to take care of all sorts of little details.
If you want to make games, learning java will transfer easily in to making games for Android O/S.
Whichever language you choose, I recommend going to Stack Overflow, clicking the tag for your language, and sorting the resulting list of questions by number of votes. This will give you a concentrated collection of very useful practical knowledge about that language, nicely arranged in a Q&A format. Here it is for C++:
http://stackoverflow.com/questions/tagged/c%2B%2B?sort=votes&pagesize=15
and here it is for Python:
http://stackoverflow.com/questions/tagged/python?sort=votes&pagesize=15
I've been reading a few C++ questions per day over my morning cuppa for the last few years, and the difference this has made has been fantastic. You learn about pitfalls you had no idea existed, tips and tricks which can be of enormous benefit, and fun and interesting quirks and corners of the language - which can help keep you interested and enthusiastic. You'll also find the community is very friendly and helpful, which I'm sure will provide some much-needed encouragement. Good luck to you, mate. :-)
Chuck Norris: Socialism == a thousand years of darkness.
Most games that were developed with console as the lead platform don't support modding
The problem here is that there are entire genres of game that are traditionally "developed with console as the lead platform". And if someone is a fan of one of those genres, then it'll be a pretty big leap to become a fan of a genre where modding is common; you mentioned western RPG and turn-based strategy. The only moddable fighting game I've heard of, for example, is MUGEN.
I went from knowing absolutely zilch about programming to writing my own Blackberry app. Mind you, I was not in a car accident that affected my memory, but I do have issues with memory for reasons too boring to go into. To make a potentially long story short: Have a project. Mine was having a decent ReadItLater and Tumblr Blackberry app. There weren't any at the time I was using a Blackberry and I didn't want to wait for someone else to charge me for one they wrote.
I cannot emphasize this enough: I did not know *anything* about programming. The *only* way I was able to learn it was the project I wanted to complete.
You have a goal, which is to get back into programming...preferably for gaming platforms. Now you need a project. Something that *you* want to make and use.
If you're not outraged, you're not paying attention.
One of the items listed is mobile, and that's not really (relatively) that difficult... Perspiration and a good(ish) idea may be enough.
It has to be not only "a good(ish) idea" in general but also "a good(ish) idea" within the limits of a completely flat touch screen. Mobile is fine when your game's actions involve pointing at objects on the screen and activating them with a touch or sliding them around, or for placing objects at various places on the screen. A touch screen is ideal for Bejeweled, Pipe Dream, or Missile Command, for example. But in other genres, the player controls a character who moves around within a large area. Control in these games is based on movement relative to the character's current position, and the character can take any of several actions such as jumping or firing a weapon. These games work best with a joystick, gamepad, or arrow keys, where the player gets some tactile feedback for where his fingers are positioned relative to the keys that control movement and actions. I don't see how to translate them into a touch screen that gives no feedback for the neutral position of movement. What's the typical pattern for platformer control on mobile?
This seems the best advice so far.
I am not one of these people who can make a new app out of several different apps in differet languages in a day. For the last 30 years I have mostly written in C, just using the C++ features when I need them. I prefer using simple tools in a smart way, rather than trying to use smart tools in a dumb way. My memory is not great, or at least it cannot be relied upon, so I think I can understand where you are coming from.
'C' is a small language. I still have the standard Kernigan & Ritchie book on my desk, and you might be able to read it and do the exercises in a weekend. If you want to use classes (and they are useful, but I have to look up the syntax every time) you can go straight from C to C++. However, C++ is huge, and the typical C++ book is at least 700 pages thick. And 'C' also leads into Java, and C# and lots of other languages. 'C' does not have graphics support, so you would probably go to using an OpenGL library, or skip to Java. Maybe the first step is to find some job that could be done on a command line.
The main thing is to find a task that interests you. I have never been able to learn an language permanently from examples in a book - you have to use it to do something for any of the stuff to stick.
How about a sudoku solver? Not a plain brute-force one, but one that tests guesses that look likely to yield results like a human does. This is a hot topic at the moment, with people using some measure of the minimum number of assumptions to measure of how hard a given sudoku is. You could look up how they do it, but by not looking you might come up with something new.
The next idea would need some graphics: make a general solitaire player. Define some syntax that describes how the cards are laid out; what a legal move is; and how you win, preferably in some human-readable format. The app would lay out the cards for you, and forbid illegal moves, or suggest legal ones. With a bit of tweaking, it could make obvious moves for you if you define what an obvious move was; could test whether a solution exists, or try random legal moves, or allow you to rewind. I know a good game called 'eights' that I have never seen in a solitaire package, and I have always meant to code it up. I started one once, with an ASCII interface ages ago, but never finished it.
If those ideas don't grab you, then you can probably find something else that does. That's the big step for me, anyhow. Then you can find a language that suits. It might be something completely different from any of our suggestions. All the best with it.
PS: Don't take some of the slashdot space cadets too seriously - you don't necessary want to code Call of Duty WWIII in your Visual Haskell browser shell on an iPhone. I swear they just want to see the rest of your brain go pop.
I recommend python as a great starter language. I haven't seen this reference here yet:
http://www.openbookproject.net/thinkcs/python/english2e/#
Of course, the previously recommneded Dive Into Python is good as well.
I think this is a great hobby to excersize the mind. It will probably help with your short term memory problems because programming relies so much on all types of memory. You should start with small problems, but more importantly write everything down. Paper is cheap, write down the requirements, then write down the design, then write down the algorithms you plan to use.. whenever you get lost go back to the paper.
Then there is debugging. By keeping the units small and writing unit tests for them you can minimize debugging to a degree, but there is always a need for debugging in any large program. Here I also recommend that you write down everything. Write down what the bad behaviour of the program is, write down your hypothesis, write down your steps to prove/disprove that hypothesis, perform the steps and record your results.. etc.. it's a slog, but debugging is always a slog.
As for the career.. Learning to play the violin to play in the NY philharmonic is just not likely to make you happy in the long run. Learning to play it so that you can make beautiful music will be more fulfilling.
An Introduction to Interactive Programming in Python: This course is designed to be a fun introduction to the basics of programming in Python. Our main focus will be on building simple interactive games such as Pong, Blackjack and Asteroids. Recommended Background: high school mathematics.
https://www.coursera.org/course/interactivepython
I was in a similar situation as the OP. I had a serious head injury playing sports. In my case, someone intentionally injured me, gave me a terrible concussion and destroyed several vertebrae in my neck. For a month after the injury I had to write everything down on a notepad, as I would forget even having talked to someone within 5 minutes. I could not understand the simplest situations and would get so confused in normal conversations that I wanted to cry. It was the scariest thing in my life, and the only thing I could think of was that I was probably going to be a worthless drain on my family for the rest of my life.
As I recovered, I tried very hard to be useful at work, and was fortunate to have a patient employer who was understanding at that time. Eventually my comprehension skills returned. They are not nearly what they used to be, however. My memory is adequate, but disappointing. I used to be able to remember conversations word for word for weeks before I forgot them. Now I write notes on the tasks that I am trying to accomplish for the next few hours. I want to go back to school for a masters degree but am terrified of failing.
I wish you much success, OP. My recommendation to you, and please do not consider this to be condescending, but you may want to consider programming books for teenagers and young adults. Once you start wrapping your head around the concepts that challenge you, then you can probably return to the books you could enjoy and comprehend before your accident.
Programming is almost exactly like the music industry. It used to be cool, and one can make a career out of it, but there is nothing there anymore, just like the sewing industry, and the meat packing industry before that.
Trying to throw one's hat in the dev ring is pointless, because unless you are a SENIOR (and I'm talking 20+ years with some big name companies) person, there is nothing out there. Due to the myriad tax advantages, any substantive work is outsourced because Tata can do contracts for pennies on the dollar spent on people hired domestically (and have a guarantee for their work which can't be done with local hires). Those who may get hired are H-1Bs which do not count for employees, so are not subject to payroll taxes. Outsourcing keeps companies from getting nailed by laws which come into effect after "x" amount of employees are on board.
I highly recommend finding another skill to work on because there just is no demand for code, just like there is zero demand by the record labels for musicians (since they are made and told what to sing, not signed due to their past works.)
Of course, if this is a hobby, go for it. There is always someone making enhancements to Combat on the Apple //. Just don't expect going into development to get any type of income coming in.
As a person with severe ADHD heads first is actually an excellent tool for learning about programming, but some of those abstract concepts take time to sink in and become salient in your mind. If you want to try your hand at making games but with a slightly lower net than plain old C# offers then I would recommend something like Construct2 (http://www.scirra.com/construct2), Stencyl (http://www.stencyl.com/), or even Scratch (http://scratch.mit.edu/) - these are a great way to get familiar with some of the programming concepts again in a visual way. This way you can make some progress without the net seeming quite so high, and have results you can feel pretty good about.
After you've done that for a while you might want to try the heads first C# book again and see if some of those abstract concepts seem to be making new connections. C# is actually a pretty elegant language and once you get familiar with programming again you'll find that it's pretty fun to work with. If none of that seems to be sticking - maybe try something completely different like functional programming? It's possible that it'll use a different part of your brain that has an easier time forming those memory pathways. Best of luck!!
I think you can only learn by doing. I think I can empathise with struggling to learn programming. I only took the beginning programming class in collage only 4 times. Then I got a perfect score last time I took it, because I found an aid to help me get started coding. I very grateful for Nick Parlante, his lectures suck for beginners, but he made the free website codingbat.com were you can interactively get started on guided coding exercises. He only has it for Java and Python. I would recommend learning Python before other languages. Then I recommend to find a simple project that is interesting to you and keep going until you can figure out how to finish it.
I'd also suggest version controlling your code. That's an additional location for useful notes, and you can also cross-reference notes in your notebooks and check-in versions. Setting up a local git repo or using github is very easy to get into.
Pretty much every programming language has API docs on the internet now. If you can't recall the syntax for a specific API call, you can find it easily enough on Google. No need to keep that in your head. Much more useful is knowing how to accomplish things. If you're going to make an effort to memorize something, I'd suggest studying design patterns and general algorithms and let Google remember the APIs for you.
For all of us, our attention is a limited resource and there's only so much we can learn in any given period of time. You may have to work harder at managing what you try to accomplish with your time, but the most important thing is that you do not give up preemptively. If you decide, "this is what I want to do!" and you go do it, I think you will be successful.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Udacity and python. I've been through two intro to programming classes at my community college. (python and c++) you're better off with Udacity. Try the intro to programming class (teaches you how to make a search engine... fun stuff)
codeacademy is good but not as indepth.
saylor.org has a complete computer science curriculum (almost complete anyway) online. It's a lot of reading, not much repetition so might be harder.
If you just want to get into game making, try flash actionscript or unity 3d. (flash for 2d .. unity for 3d .. although you can do 2d and 3d in either) If you want to make games, use one of those and make a few and put them up on kongregate.com
Whatever language you get into just get some good reference texts so you can look things up.
Push your return address and frame pointer onto the stack!
requiring completion of a good series of labs. I found the offerings at De Anza College (Cupertino, CA) to be great, and I believe they have on-line/remote available.
:)
If you cannot find something like this, you will be left to your own resourcefulness. Sounds like some good recommendations for Khan Academy python. I might recommend web or the mobile apps some folks suggested over gaming. That gaming stuff can be pretty grueling. Start with HTML, then some php or python and javascript.
I feel like programming helped to remedy some of my own ADHD. Don't give up. Give it time and it can suck you in!
I'd really like to see better HTML 5 games, so start there. HTML is pretty easy to begin. Then Javascript. Then CSS. Then you can get into all the new kool stuff like WebGL, which you'll need to create games with it.
This will permit you to create games that can be run on just about any computer and OS, and possibly a large breadth of devices, such as tablets or large screen phones.
I'm surprised no one pointed this out yet, but different game stores use different programming languages.
For example:
Xbox Live Arcade - C# with XNA for Indie games, C++ for standard games (I think...)
iOS (iPhone/iPad) - Objective C, and you'll need a Mac with XCode to develop for it.
PS3/Wii - C++, but as far as I can tell, they do not make Indie development easy.
Windows/Mac/Linux - Any language that will run on them. The most widely used languages for each platform are likely C++ for Windows, Objective C for Mac, and C for Linux.
GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
I have to hand it to you tepples, you do take some contrived positions sometimes but more often than not you do give some food for thought.
Thank you. I've learned over the years that extreme contrived positions are a good way to test the limits of a particular theory in order to provide food for thought. But lately I've seen a lot of Slashdot users chicken out of discussing them by using the thought-terminating cliché "you are an edge case", as if edge cases were inherently not worth serving.
A lot of games that need relative movement like Final Fantasy for example allow you to put your thumb anywhere on the screen and the "joystick" just appears under it so you get an absolute positioning for the relative controller.
This method is fine for going from straight to left (place thumb, swipe, hold) or left to straight (release thumb) for something inherently turn-based like Final Fantasy. Another possibility is to handle touch like Diablo or the DS and Wii versions of Animal Crossing and interpret a touch far from the character's on-screen position as a command to walk in that direction and a touch close to the character as a command to use a tool.* But that wouldn't work for something faster-paced, where the player expects the character to make quick turns from left to up, left to right, etc. Super Mario 64 DS, which allowed using the method you describe for Final Fantasy, also had a directional pad to fall back on for those levels requiring quicker reactions.
Furthermore, what would work for having multiple action buttons, such as jump, trigger main tool, and trigger secondary tool? The Sega Genesis used to have C to jump, B to trigger the main tool, and A to trigger the secondary tool, and the player could feel which button the thumb was over by the edges of the buttons. The GameCube's buttons were even more strongly optimized for touch identification: a big A button, a smaller B button in the middle, and kidney-shaped X and Y buttons.
* "tool": I'm trying to use terminology that works well both for violent games and for non-violent games.
Hi, sorry to hear about your challenges. I hope that you may find these links helpful, they are more of an introduction, and I am not sure whether they would be suitable for you, also the course uses Python. It is not a programing course per se, but might be a good refresh:
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00sc-introduction-to-computer-science-and-programming-spring-2011/
this is how I started programming myself, I believe it might be useful for you too. The course contains wonderful exercises, which are very well structured and provide a good framework, so you don't stray much. The course will start in the autumn under the edX umbrela:
https://www.edx.org/courses/MITx/6.00x/2012_Fall/about
You may also check out coursera courses and udacity courses as well:
http://www.udacity.com/
https://www.coursera.org/
Good luck!
School doesn't have most of these issues.
This is obviously a long-term plan (most good things in life take time, I'm sure you can understand that), and the punchline of this plan is to get into a large corporation that does a lot of EO (Equal Opportunity) hiring.
Yes, this is a long-tem plan. It's not "Learn C# in 24 Hours!" type of stuff. But the payoff is amazing: you'll never have to worry about finding another job, you're not a burdon to society (hell, you'll be paying lots in taxes), and you'll have plenty of money to do whatever you want.
Jumping back in is a bad idea! I would consider being lowered in by a rocket-powered skycrane. Much safer.
For games, use SDL (C) and embed Lua. Use C for performance sensitive stuff; use Lua for high level stuff. This is what the majority of cross-platform commercial games do. SDL gets you onto all platforms (C and SDL work just about everywhere) and Lua (which is implemented in pure C too and goes everywhere) lets you focus more on the content of your game instead of masturbating with complex language issues.
I havnt done much programming myself, but i am currently working at getting back into it; in my attempt, im going to be taking free online classes from harvard edx. here is a link: https://www.edx.org/
Start to get involved in an Open Source project that has an active developer community. If you want to get into gaming, there are a lot of interesting game engines. You can start with small tasks like fixing trivial bugs and then work yourself towards the more complex issues. You'll have guidance from the other devs and your code will immediately be used by many people. By using this approach, you can also see how fast you can analyze problems, learn new things, get familiar with complex algorithms, etc. You will see how well you work in the team and how good you are in comparison to others.
The only thing you need to keep in mind: if you start from scratch, most people in the team will be god-like persons. They seem to know so much, are way more creative, much more adept at what they are doing than you are. Take your time, at least a year, and then make an assessment of your capabilities and your personal development.
There's no shortcuts. Don't try to make games yet, anybody talking about games is taking entirely the wrong approach.
Pick any language. If you understand the basics of programming properly, and don't just copy & paste code, then you'll be able to transition to any other language trivially. I moved from Java to C++, C#, Python, Ruby, BASIC, etc. all with VERY, VERY little time to learn the syntax differences. Its just not an issue.
So DO NOT worry about language. Pick a language (I reccomend Python or Ruby, less cruft) and code in it. Just get some basic stuff working. Read some books or read some tutorials online, it doesn't really matter. Write sort programs, write echo programs, write 99 bottles of beer on the wall, write zork, write mario.
In 1-3 years you can worry about iOS or XBOX development, I'm sorry but you're just not anywhere near where that would be feasible yet. But that said, you can transition to that kind of work from ANYTHING, so don't worry about what you do now, just do something. Get comfortable with code, and please,
TAKE YOUR TIME AND LEARN THE BASICS. The importance of fundamentals in programming CANNOT be overstated.
GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
Through Coursera, Rice University is offering a free online course in a few weeks on introductory Python programming with a specific focus on games:
https://www.coursera.org/course/interactivepython
Why not try it? If you don't like it or it otherwise doesn't work for you then you've lost nothing.
Space game using normal deck of cards: http://BattleCards.org
http://programming-motherfucker.com/become.html
This link has quite a few free books to look into for nearly any language you'd want to get into.
...that is interesting and join it. Take little nibbles out of their bug reports, and work your way to adding features.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
Of course, it won't do you any good for XBox work, but Javascript is a modern language with lots of demand and a reasonable amount of potential with lots of online information and a super easy method for delivery...the web. The games folks write using javascript today are very different from what you might see in a console, but there is a LOT of interest in them and you can host your own site with little or no money (depending on the amount of traffic).
My personal opinion is that mobile, html5 and backend are the way to go for work these days. If you just want to do hobby games, jump into rails, django, cake1, lift or some other web framework and build up a cool online game (it doesn't have to be super fancy) and go from there. What you can do with a browser these days is comparable to what folks could do with PCs 10 years ago (maybe 15...)
Similar to your situation, I have memory issues. Mine seems to be short term memory loss, if I do it tons I'll retain it but even then a few months down the road I'll lose it again.
That said, programming as a career may not be for you. This doesn't mean you can't have a hand in software development. There is still Q&A as well as UI design. Either of which you may be suited for.
I'm sorry to hear of your misfortune and wish you the best.
I am Bennett Haselton! I am Bennett Haselton!
20 years ago I wrecked a motorcycle and bashed my head HARD. Huge concussion, memory loss issues, etc. Although I had programmed in BASIC since I was a kid, I found it very difficult to get back into again. However, these days I am a professional lead developer/architect in C#, so all is not lost - you still have hope. So my heart goes out to you and here's some of the stuff that I did to get it back:
- Your short term memory is going to be messy until you get it retrained. (The mechanics of your brain are smart, they will get better with use. I suspect new 'circuitry' is created by your brain to route around any past damage) Get in the habit of making notes about what you are thinking about, as well as lists about what you are trying to attempt. (For some reason, I found writing on paper worked better for me than typing in the notes. I think the mental processes involved in computing the physical act of shaping all the letters helps your brain get back in shape. Your mileage may vary, this is just what worked for me.)
- You were talking about reading the C# book then getting lost after a few chapters. I had that issue as well (Still do from time to time.), some times I found it best to read as much as I could comprehend, then sleep on it. Usually the next day it would make more sense. Sleep is excellent for a repairing brain. Do some experimental coding using what you've learned from the chapters you understood. Get good at that part. After doing some of that for a while, go back to the book and try reading what you had found confusing again. Read as much of it as you can understand. Also just brute-force read a chapter at a time, even if you don't understand it, then sleep on it. After sleeping, try reading it again. Too me, it seemed often like my subconscious part of my mind was understanding it, but the conscious part of my mind was having difficulty figuring out how to build a model to comprehend it. Keep at it. Don't give up!
- I agree that C#, with it's managed memory model (Meaning you don't have to manually allocate memory, keep track of allocated memory, and then release that allocated memory later on - the Garbage Collector keeps track of it for you. You create your objects, and the garbage collector will take care of all the memory mechanics of it for you. Which lets you focus on getting code written, rather that worry about esoterica.) will make it a lot easier to get your brain flowing down the development direction again. Same goes for Java, but then there's the issue of which of many IDEs you should/can use for Java. No matter which you pick, even Java developers will tell you that Visual Studio just smokes anything out there for Java, so I'd go with Visual Studio with all it's brain-assistance stuff and a single way of doing things rather that the myriad Java options. Every time I try to do Java, I get bogged down on all the similar-but-different choices (Eclipse, NetBeans, JBuilder, etc.) I have to choose from, and that's just for the IDE. Some people call that a strength to have all the options, but I find it just unneeded complexity. Visual Studio beats them all anyway, IMO.
- Another trick is to (temporarily) skip over chapters that don't make sense and try reading further chapters. Quite often C# books cover completely different concepts in different chapters. Just because you can't grok chapter #5 doesn't mean you aren't going to be able to understand Chapter #6 or Chapter #10. Some times you just work with what you can, and eventually just by using the other stuff, the next time you return to a problem chapter it will just make sense this time. Hard to explain.
- Just repetition. I've been doing that currently with Professional ASP.NET MVC 3. I've had it for about a year now. First time thru, there was a lot that I found puzzling, or just "Why would I do that??". After doing MVC 3 for about a year and a half now, I keep re-reading that book and gleaning more information. Not specifically shilling that book, that's just the one I've been returning to a lot lately a
I'm curious, do you have any more information about the next versions of .Net you're talking about? I'm sure people at Microsoft are already working on .Net 5, but aside from Roslyn, they didn't release anything yet.
It's a matter of finding and following the right people on Twitter :) lots of people talking about .Net 5.0 at the moment!
you can get a job without any real experience.
Learn a functional programming language. Forget the rest. You will be very happy that you did.
A nice side effect is that your value to an employer will be much higher than one of these 30 year younger rock star coder people.
Learn a functional programming language. Forget the rest. You will be very happy that you did.
A nice side effect is that your value to an employer will be much higher than one of these 30 year younger rock star coder people.
This is the best comment yet. Program by programming not by remembering and reciting minutiae. Much of that minutiae makes the plumbing programming happen for sure. But, functional programming is oriented towards defining the result not wading in the deeps trying to build a bridge with your breath held.
Learn a functional programming language.
This is the best comment yet.
Sorry...I don't buy it. As a mathematician, yes, I find functional programming interesting (because I've looked into haskell outside of this comment.) But I need better than a couple sentences to be "sold" that suggesting it, in this situation, is the best comment yet.
PS: I don't reply to ACs.
There is another reason:
my memory went to crud. I have no recollection of how to do anything in either of those languages any more. I've suffered some damage, and my memory isn't all that great.
Avoiding state is a good thing in the submitters case.
Node.js, Ruby on Rails, or even some AWS cloud based hosting will get your some development juice. Set yourself up an Amazon micro instance; get to know it - learn it. If you are more frontend, take an existing site and see what you can do with HTML5 techniques along with CSS#. Just have fun with whatever you try!
I was a successful SCADA programmer that worked for a company now in bankruptcy. IMHO you should do anything you can to pursue a MS or Java certification, the latter paying the best. Recruiting companies will invariably want to test you on your knowledge via BrainBench, PreVisor, etc. It doesn't matter how much experience you have designing successful apps, first you must qualify. MS Certification or Java Certification is the best way to go. Stay current and informed on your languages! If possible, have your company foot the bill for your marketability.
If you think C# programmers are bad, you should see the kind of system's designs used in GPL'd Opensource projects. You would think they haven't read about best practices for scalable systems from the past decade. Forking processing, IPC, blocking IO, spawn moar threads! derp
Now both of our blanket statements cover every programmer ever.
"I have been reading slashdot regularly for many years now, and I have faith in the Slashdot community advice"
You must be new here!
Defining Statistics and Social Research
You might find Python a good place to start, even though it's not for your target platform. I learned it in a class as my first popular programming language. I was using Prolog before that, but I'd only recommend that if you're into very particular types of problems. Anyways, my class had a great book called "Python for Software Design - How to Think Like a Computer Scientist" by Allen Downey. It's a super newbie book for building from the ground up, very conversational, and a handy reference for when you forget stuff (I have memory difficulty too, though from ADD mostly). It doesn't cover all things you'd ever want to know, but as a foundation, it's really excellent. Python is nice too because it's not so verbose, there are lots of libraries available, and it's fairly popular so getting help when you need it (online or from friends) is easy. Oh, and if your working memory has troubles, you might also find higher level languages easier to work with too. This was one of the good things about Prolog for me (that and I have an extensive background in formal logic). It gave me a place to tackle a specific type of problem (natural language grammar) in a declarative way that actually inspired me to study computer science. Had I started in something like Java, I don't think that would have happened. I didn't get into that until much later. That said, I do love all the stuff available for Java. Learning that was like getting access to the world's biggest Lego set. Also, especially valuable for memory problems, you might want to also really consider the IDEs available for the language you pick. It seems pretty trivial for most people, but a smart, user friendly IDE can make a huge difference in frustration levels if your working memory is affected at all. For Java, which I've been working in most recently, I've been using Intellij IDEA, which has proven to be a lot better than Eclipse for me. They have one for Python called PyCharm, but unfortunately it's not free. Anyways, I think your story is inspiring and I wish you the best!
Get a job you are totally unqualified for. This is easier than it sounds. You will need both: a competent accomplice to provide a list of buzzwords and the ability to lie casually. Of course, you will need “experience”. This is easy to pretend. Creating a fake company is just a matter of a $25 cellphone and $10 activation, the drug-dealer special. Soon you will have a paycheck. Lease a car and apartment that you could not possibly afford without this job. Get a high-maintenance girlfriend. You will learn programming.
Although I'm tucking my reply in here where it seems to fit, I am directing it at the OP. I don't know what your capability was before the accident, or is now, but I guess my optimism for your condition compels me to suggest re-learning BASIC for starters, as some might come back to you. I know a little about many languages (professionally), but if I had to recommend a starting place for someone new to programming today, nothing seems to beat good old BASIC for getting going. Heck, it even has "beginner's" in its name! The problem is, the base language is not as ubiquitous today as it was when I cut my teeth on the 8-bit computers of the 1980s. However, I recently came across a newer cross-platform tool called "App Game Kit BASIC" that reminds me of the BASIC of those days. (Its co-creator claims to have first learned programming on those 8-bit machines.) It is game & 2D graphics-oriented (with 3D planned for the future), so a simple game creation would give you something to shoot for, and you could use whatever graphics you can find if you didn't want to create them from scratch. And, if you do progress over time, you can move your code from the PC over to other platforms like Mac, iOS, and Android with the tool. Also, I would recommend buying the 3rd party book, "Hands On AGK BASIC", that has an overall teaching style aimed at the beginner. I own the tool and the book and am pleased with the small learning curve since I could build on what I remembered from back when. Note: I am not affiliated with the tool, book, nor their respective companies. I wish you luck.
It's a 10$ app on the iPad. You can make small apps and games in Lua and I think is exactly what you're looking for.
http://twolivesleft.com/
http://itunes.apple.com/us/app/codify/id439571171?ls=1&mt=8