How Can an Old-School Coder Regain His Chops?
DonLab writes "I was a proficient software engineer in the 1980s, writing hundreds of thousands of lines of ALGOL, FORTRAN, COBOL, and Pascal programs, as well as working in 370 and 8080 assembly language & pre-relational DBMS systems. My hands-on programming career ended when I became a freelance analyst and designer, ultimately retiring young in the early '90s. Now I'd like to reenter the field, but I'm finding that I know nothing about today's post-C languages, programming tools, and computing environments. I wouldn't know where to start learning C++, PHP, Java, HTML5, or PERL, much less how to choose one over the other for a particular application. Can I be the only pre-GUI software designer or hobbyist searching for a way to update his skills for Windows, iOS, or Android?"
Submitter - not trolling, but you should include C# in your list if you want to be relevant today.
Don't hate the players, hate the game.
If you want to develop for the iPhone/iOS, then learn Objective C. Just figure out what you want to do, keep your focus narrow for now, and work backward from the requirements.
Slashdot: Everything in Moderation, including Moderation itself.
The biggest thing is to learn modern object-oriented design. Java's pretty good for that. Pick up any "java programming for beginners" book, and for the moment forget your old knowledge. Learn about objects, then the APIs, then finally start throwing your old algorithms knowledge at problems. As soon as you start getting a basic competency with Java, switch over to objective C.
Avoid Perl. Its not a clean enough version of objects. I highly recommend it later on, but get some more updated theory first.
Avoid C++. This isn't 1980 anymore. You shouldn't need to be mucking around with that much detail.
Avoid PHP. It's not worth learning anymore.
Here's a few tips that I try and use when learning new languages:
1) This one may seem obvious, but just start using it. Write "Hello World!" programs, and then an address program, stupid stuff until you get used to syntax. Eventually you'll start to pick up on the strengths of the particular language and come up with ideas on how to write stuff to further enhance your knowledge and proficiency.
2) What worked for me usually was to subscribe to a mailing list. Not necessarily even the 'official' *-users mailing list, but just one that talks about problems. By reading through other people's common problems, not-so-common problems, and more importantly, the community's solutions will help get a perspective of the language and how other people are using it.
3) Start looking at well written code in that language. Go on GitHub, Bitbucket, sourceforge, or whatever, and start looking through the code.
go to a book store, buy a book and read it?
It's not a typo if you understood the meaning!
Pet project.
I use C++ for all my development, with a small smattering of perl. Learning Python is on my TODO list. Never touched C# and have no interest in learning a MS platform only language.
\
Until 2 years ago, I was working at a place where embedded and DSP developers were using pure C - C++ was forbidden.
My rights don't need management.
First, start by giving up on that "I don't know where to start" attitude. Just dive in. That's how you learned code "back in the day" and very little has changed. You just need to start absorbing information and trusting that after awhile, it'll turn into useful knowledge.
#fuckbeta #iamslashdot #dicemustdie
It's hard to get a job these days as anything but a code monkey. Anything really interesting (operating systems, compilers, games, etc.) will net you little to no pay because there's so many people who don't mind doing it for free or cheap.
Really, did the crash hit you that hard or are you bored? I don't know if you understand the employment situation for programmers these days. You're going to be old in an industry noted for it's ageism, behind the curve technologically, and depending on where you do find a job, you're likely to be paid terribly for long hours and work under a clueless asshole boss.
I really hope you have other options, it's ugly out there these days.
I wouldn't discount languages like C just yet. They're still hugely important in the kernel world, for example.
As far as newer languages go, there are a lot of F/OSS projects that could use another hand. Have a look at the Bugzilla for various projects and grab the latest source from svn/git/mercurial/whatever. Your skills as a programmer should transfer over to a new language relatively easily, and you'll have done a good deed.
"Every vision is a joke until the first man accomplishes it; once realized, it becomes commonplace." -Robert H. Goddard
Proficiency in ALGOL, FORTRAN, COBOL, and Pascal makes you stand out from the crowd. Market yourself as a specialist.
Facts do not cease to exist because they are ignored. -Aldous Huxley
If already know those programming languages, you should be able to pick-up the newer ones easily. Maybe look at some Open Source code to familiarize yourself with the new words and structure, but that's all your really need.
The biggest challenge will not be learning these new languages, but convincing the HR dopes (i.e. liberal arts majors), that just because you've never programmed in C++ or C#, doesn't mean you don't know to do it. That's been the biggest challenge for me: "But we need someone who knows System Verilog, and you only know Verilog. You're not qualified."
Idiots.
Also you may find yourself working against ageism, even if you did have the required skillset. Slashdot just recently ran an article about how hiring managers in tech firms assume anyone over 40 is not suitable for working on new technologies. They want young blood, preferably those with no family, no life, willing to work lots of hours and/or fresh out of school.
"I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
Postpone learning the other languages and focus on Python. It has almost as many modules as PERL but us much more readable. It supports object oriented design and is easier to use for small projects than C++.
http://python.org/
Religion is poison to rationality, and we lose sight of that at our own peril. -- Lurker2288
...I heartily recommend the books from the Head First Series: http://oreilly.com/store/series/headfirst.csp
I hope you don't think I'm trying to sell you something...I've been using these books to learn and as references for the languages I know. Java and C# are covered in the series and it's a very unique (and effective) way to learn. Wish you the best!
-- Your friendly neighborhood Spiderman
Work through this over the next 3 months. http://book.realworldhaskell.org/
A language is just a syntax and a set of standard libraries. Pick a language, find some examples, and start tweaking them while studying the API. If you still have the skills, it won't be too long until you're writing big stuff. Just be sure to keep studying other people's code so you'll know which of your old habits arn't appreciated in the modern language, and you'll be fine.
The biggest differences you'll need to get used to is:
1) The programming tools you can use today (from vim to Eclipse) are much smarter and more helpful
2) The documentation is differently organized. I still have programming books from my childhood like "Introduction to MS-DOS Programming" -- they're nice and talk-y. Nowadays, particularly in OO languages, the documentation tends to be online and bundled with your compiler or IDE (or maybe on the web). Modern docs tend to be a lot more terse and to-the-point, and you explore them rather than read them.
Good luck!
For every problem, there is at least one solution that is simple, neat, and wrong.
Go embedded.... I'm new to the industry (4 years post-college), and write nothing but straight C; Makes it easy.
You're a coder who's written hundreds of thousands of lines of code, but you don't know how to start learning a new programming language?
I suspect there's someone out there, tasked with supporting some of these "hundreds of thousands of lines," who is cursing your name and your sorry-ass programming skills, right now.
I'm 41, an "old" programmer, and consider this question so stupid it's embarrassing.
What'dya mean there's no BLINK tag!?
Although it sounds like a cop-out; anyone you'd want. I'm a hardware type, so I only use programming when I have to. I like being close to the metal, so your assembler experience is still valid. I'd kick the tires on smalltalk/squeak squeak.org; the go programming language by Robert Pike; Perl is good for text mungification; Python has its fans; I've used Forth for debugging ...
If you use open source software, (or extensible commercial stuff) learn the language where the action is, for you.
I'm not a really good programmer at any one thing, but you learn fast in this game. DSP work and multiple core processors have a lot of growth ahead in them, that's why I mentioned Go. The embedded space is still active, and your skill set should be a nice match.
Someone else can fill in the must reads - I liked the mythical man month, design patterns look interesting, Eiffel has its charms, too. Stonebreaker on databases, other stuff.
Now I'm just rambling, hope others can help more
This is progress?
Why would you want to?
Be the Boss and get the children (under 30) to write the code.
Programming languages might have evolved, but learning them hasn't changed.
1) Pick a language (that choice will come naturally if you already have a project in mind)
2) Get your hands dirty
If your not familiar with C and its variants, I'd start with PHP. PHP is so similar to c++, yet so simple, it would be easier for you to dive in. Since it's a scripted language, you can see your mistakes without compilation and gradually slide you back into OOP. Then, use that same box and gcc to step into c++. You can also learn JavaScript and port what you've learned to Java. Html5 is an html spec that at its root, is xml. Which isn't programming.
Stick with what you know. You're trying to enter an overpopulated market with no experience in the new languages.
"Hi I'm here for the French teaching job. "
"Experience?"
"I'm fluent in latin, amazing at it in fact"
"You're here for the wrong job"
The change from imperative/procedural languages to object oriented languages can probably be done through reading and experimenting, but an instructor-led course would be easier by far. If you can take one or two semesters at a local college of some object oriented language — Java and C# are the two most approachable, and conveniently have free IDEs and toolchains — that would put you back in the game enough to learn through reading and through playing around. Once you have your mind wrapped around OO concepts, a GUI framework (Swing, WinForms, GTK+, etc.) is easy enough to pick up. Similarly, learning how to exploit relational DBs is deserving of a course: I've never seen anyone self-teach more than about half of a relational DB's capabilities. I'd put off C++ to start: the language is fearlessly exploring what happens when OO concepts are applied orthogonally across a language, but Java and C# fit nicely into the 90% solution space that people actually use.
Great that you'd like to re-enter the programming community, but why do you want to?
If you're looking to be a code monkey again (as if), most jobs are for Java, C# or PHP with a bit of HTML/CSS & SQL on the side. You can pick any and make a decent buck.
If you want to simply take up programming again for the fun of it creating or contributing to an interesting pet project is more important than the language choice (with your experience you should be able to pick up any language within a couple of days/weeks anyway).
If you want to further your career you'd be better off aiming for a lead architect position, which is pretty much language-independent.
This sig is intentionally left blank
Dude, WTF is that kind of a question? Isn't the answer obvious?
I don't think I understand your problem.
Compared to back in the day it's paradise today. We've got bizarely powered hardware that fits in you hands and costs less than a good stereo set. You can get in anywhere and have it up and running in no time. We've got the best publishers competing with each other in writing concise witty indepth books on any IT subject you can think of and we have a very solid open source eco system with all the pickings you like for free (beer & speech).
I suggest you get yourself a cheap laptop from dell our something, install ubuntu on it and start coding in one of the cool new programming languages. I personally recommend Python, because it really is the only PL I know that is used in every professional field I can think of while still being a neat new open source PL. For getting up to speed fast you want to check out the books available from O'Reilly and Pragmatic Programmers Bookshelf. Any subject they don't have a book on isn't worthwhile picking up. That's a good rule of thumb.
That aside, it really doesn't matter wether you're 18 or 80, just dive into it. I know good programmers aged between 17 and 60 and all of them learn new things every day and have no trouble doing so. Age issues are mostly hysteria. If you're interested and hooked, you'll pick up a subject fast, no matter how old you are.
Welcome back.
We suffer more in our imagination than in reality. - Seneca
There are still plenty of FORTRAN shops out there, or at least legacy FORTRAN applications.
There is a ton of COBOL apps that need maintaining
If you are going to learn anything, it should be stuff that makes you more interesting as a FORTRAN and COBOL coder. For example, get comfortable making HTML/CSS pages. A lot of shops are trying to connect COBOL to the web and SOAP.
Find a web site or book to learn what relational databases are. Everything is relational these days. The NoSQL crowd think they're post-relational, but they still talk in the relational language.
That's the other thing you should learn: Oracle PL/SQL and Service Oriented Architecture (SOA). SOA these days means SOAP and message busses. At my place of work, we have a legacy COBOL application that needs to connect to the enterprise's Enterprise Service Bus (ESB). We are struggling to find anyone who can do it inside our company.
Your future is being the bridge between the past and the future. Learn how to make those old apps do new tricks, and you'll make lots of money.
Learn Perl. Because Perl is like the swiss-army knife for programmers. You may not write an application with it, but you might use it to make bulk changes to a hundred COBOL or FORTRAN source files.
The bitter lessons of a veteran coder: http://bitterprogrammer.blogspot.com
Well what would you like to do.. you mention Windows, iOS and Android, sadly all three of these platforms have different "best languages" For windows programming you need to program in Visual Studio by Microsoft, using any of the available languages, C# being the one most supported to use all the features of Windows. The plus side of learning C# is that it is also the most used language for ASP.NET web pages. Android runs applications written in Java, get Netbeans or Eclipse (I prefer Netbeans). iOS uses a language called Objective C which is basically C++ except has a more mature objects syntax.
Now that should cover the languages you would want to learn. How to learn is a different matter. Honestly I would start with Java. It isn't the most used language but I am assuming that you haven't programmed with objects/extending/implementing/etc, IMHO Java has the easiest and most strict implementation of Object Oriented Programming. Should be the easiest to pick up from a book or even tutorials online. There is always the option of taking a couple college classes as well.
Once you pick up one Object Oriented language you will pretty much "know" them all.. then its just the matter of learning all the quirks and libraries for one of the other block style OO languages. Stay away from C++ as your first OO language, the OO implementation is flakey and very young, its better to learn from a more strict and mature language and work your way out into the wild from there.
Mod parent up! You have to have something you want to accomplish.
I'm a web dev who had no meaningful GUI skills, and limited Ruby skills. But I wanted a particular kind of multi-pane editor with wiki formatting and language support for ancient Greek, that worked a bit like KDissert, my favourite mind-mapper/outliner.
I found I was able to figure out the essentials of QT-based GUI programming in Ruby over a focused long weekend. Nothing but persistence and online tutorials were required. It would have been easier with Python, as the documentation was better. But with a definite target, you just keep moving toward it.
Postscript: Then I rewrote the app in PHP and put it online for easier accessibility. :)
Java and C# is where you'll find the old style coding you've been brought up. Those languages give themselves some new-fangled and modern look, but in reality the mess they create is just as bad as 150k lines of Cobol. If you were able to debug accounting applications 20 years ago, you still can do it today - they're just as bad, nothing really was learned.
otherwise known as B.
Actually if you sharpen B, (go up a semitone) you end up back with C, which may be telling as it seems to be the basis for all we have today.
Also, don't sell Fortran and COBOL skills short. There is a real demand for people who can program these...especially COBOL. (Lots more folks are still writing Fortran than COBOL, but lots of businesses are running COBOL and need people who can update and modify the codes written a couple of decades ago.
Kevin Oberman, Network Engineer, Retired
The main difference, aside from syntax, between the old way of coding you've done and the new, is objects. You have to learn to think in terms of objects and object modeling. If you can't do that, no amount of rote syntactical education will help you.
I'm not really a big fan of Java for most things, but hands down the single best, most approachable, most relevant introduction to object oriented program is Kathy Sierra's book "Head First Java". It's one of the only textbook style programming books I've ever found readable enough to just sit down and go through in order.
Once you understand objects -- including inheritance, polymorphism, and so on -- then you're at a place where the specific languages vary mostly by the libraries available for them and their syntactical differences -- which are easily overcome. C# and Java are extremely similar so I'd start with one or the other. C++ is still the real deal, but both C# and Java let you work without having to manage memory so damn carefully.
Starting with Java over C# will, IMCO, give you a better feel for best-practices because the MS Visual Studio IDE tends to push you to draw your screens and dialog boxes first, then hide code behind events and buttons instead of starting with a functional object model and then using the UI tools to build an interface and call back into your real objects. C# will probably take you further in the employment market, but learning Java first will make you a better C# programmer.
The problem with quotes on the internet, is that nobody bothers to check their veracity. -- Abraham Lincoln
Why update at all? There are still legacy systems using FORTRAN and probably COBOL as well. While there are C#, Java, PHP developers all over the place I imagine that finding a developer to maintain a legacy system is extremely hard. Of course that means there will not be many jobs out there for you but the pool of qualified applicants will be extremely small.
Pick a language and dive right in. If you are proficient in as many languages as you state, then learning "modern" languages will be no problem. Especially if you are familiar with Pascal, which structurally is very similar to the languages you want to learn.
C++, PHP, Java, C# and Javascript are all related structured programming languages, and primarily differ in minor syntax, class definition, data types and strictness.
For example, the C code:
if (++i > 10) {
j+=5;
i=0;
}
will execute as-is in all 5 of the languages I mentioned (PHP would have $ signs in front of variable names). So if you are familiar with C, or even Pascal, then you already understand a good portion of modern languages.
"HTML5" - HTML, CSS and Javascript (and throw in PHP for server-side), would represent the largest departure from what you have done in the past, due to the tremendous amount of segregation between what runs on the server versus what happens in the browser. To some extent the entire thing will seem like a big hack, and to a large extent that's what it is.
Still, my point is that if you were able to become proficient over such a wide variety of languages in the past, then you will not have any problem today, especially since many of the modern languages are quite similar.
Better known as 318230.
Eric Steven Raymond in his how to be a hacker is a good start, some say a Real Programmer Can Write in Any Language.
My wife is an Architect and she has a friend who started in the same business at a time when drafting was done with pencils and rulers. In early middle age he took a comfortable sideways step in the business. Now the work is all high pressure CAD drafting and he can't get back in to work.
I am 44, I have been working in the transportation field for 22 years. I work for a big engineering firm and the pay isn't fantastic. The advantage is that employees are valued for domain knowledge and the tools you know aren't so important. My main business now is configuration management and for me this is a field where your experience can be valued, without you understanding all the latest wiz-bang tools.
I don't have any easy answers except don't focus on the tools (Java, C#, etc). Thats a game you are going to lose. Focus on your domain knowledge. Do you know banking? Look for work there. That kind of thing.
http://michaelsmith.id.au
There are build managers, release managers, configuration managers, QA managers, etc. All who need high technical skills, but no need to do heavy duty programming skills. What they need is a technological eye and the ability to solve problems on the fly.
These positions get paid as much as developers, and are quite technical. And, they tend to be the place where older individuals can really make their mark. You can't out code 20 to 30 year old developers. They grew up in college with this stuff and know it forwards and backwards. However, most of them are pretty lost when it comes to the overall design of a software development life cycle.
As for programming, my recommendation is to forget about compiled languages.
Learn Linux and BASH shell scripting. Should take you a couple of weeks to get the hang of it. Then, try Python, and after that JavaScript/AJAX. These are the languages that glue everything together and can be used in either Windows or non-Windows environments.
Your main concern is getting a hang of object oriented programming. That was the most difficult thing for me to get my mind around.
Comment removed based on user account deletion
It's quite alive, if you want to toy around you can start from basic level of "pure" Free Pascal DOS-like IDE, and take it from there with whatever tools and toolkits you like. Or Lazarus. There's still good old Delphi of course. Wikipedia pages and categories are, as usual, a good starting point to finding related projects & communities.
One that hath name thou can not otter
And of course books and videos.
I sincerely hope this reply didn't tell you anything you didn't already know.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
Download a Linux distro like Ubuntu and have fun. There is far more free software available today than you can possible consume. Hack on the kernel, set up a web server with LAMP, play with Java, hack on Open Office, use Eclipse for an IDE, etc. Source code for everything is freely available. The world of software has changed immensely from the 1980's.
Java isn't that tough. If he were to find a local college willing to let him audit or, if necessary, pay for just a Java class then it would probably be a worthwhile investment. If he has experience with procedural languages and programming then a good Java course would let him catch up with OOP design.
I think Java still makes a good poster child for OOP design and is more portable and accessible than C# or any other .NET language.
My God! It's full of eval()'s.
I'm not like you at all in the sense that I am a kid who started learning how to program without knowing anything about it at all.
Around my 6/7 years, I was taught HTML 4(very basic things) at a computer school. Then, when I turned 11 I got interested in it again and learned a bit of Javascript, but I didn't really realize what I was doing. One year later, though, when I turned 12 (or 13, I can't remember), I browsed thousands of C++ tutorials because it seemed the right thing for me to learn. It was C "with classes", which included nearly all the languages I thought existed. After 3 years on my own, learning through my own projects and tutorials, I bought a great book called "C++ How to Program" (and other Portuguese books). They helped me gain some algorithm development techniques while not teaching me language semantics and esoterisms themselves.
Added to that, I learned PHP for a couple of projects, and I realized that indeed C++ had prepared me for that very well. Same thing with Javascript -- I understood it immediatly. Then I decided to go with Assembly, which you already know. It helped me understand deeper roots within C++ which, in turn, enabled me to understand other languages in a better way as well. Nowadays, whatever language I look at, I usually get the gist of it just by reading a few lines of code, because *most* of their features are contained in C++ or C++010 or C++-related articles that I read. Also try to learn a bit of the Win32 API, but don't forget to write portable code. I worked with the W32API until I moved to GNU/Linux and had to write portable code so that all my windows friends could run what I programmed.
Have you heard about SoylentNews?
Er, same way everyone else does... Take a class or better yet, start Googling.
If your experience is all in Fortran, COBOL, and the like, the big thing you're missing is experience with object oriented design. So you need to focus on acquiring that. And you can do that with any modern, object oriented language.
So what language should you learn? That depends what you want to do.
iPhone/iOS: Objective-C. That's the only option.
Android: Java. It's not the only option, but it's the very strongly encouraged one.
Windows: C#. Again, it's not the only option, but it's the recommended one.
Web development: Java. People love to debate about what's the best language for web development, but Java is probably the dominant one, and it's a good default in any case.
"I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
That's my advice. HTTP POST, GET is a bit like 3270
Learn Object-Oriented Programming
http://www.android.com/ -- you learn Java, the projects are small in scope, and you can demo your stuff easily to friends, and it is only getting hotter. :-)
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
If you don't have a passion there's no point. Programming is a really hard slog if you don't have that drive pushing you forward.
I walked away from computers all together back in 1984. 10 years later I was doing construction and it hit me. I haven't looked back since.
You need to find something that you want to do, figure out the technology that is best to do it, and get at it. The books out there these days are amazing, and thanks to Google, YouTube and iTunes U there are thousands of people out there willing to help you for free.
Get hired for the skills you currently have, in a company that's small enough that it doesn't have a huge number of software engineers, and one that's a good company to work for and therefore doesn't have too much turnover.
Do good work and collaborate well with your colleagues. Be constantly on the lookout for any vaguely software-related task that turns up that's sort of a nuisance for them, that nobody has specific expertise in, but is too small to justify a full-time hire.. Don't worry if it's a marketable skill as long as it's a _new_ skill. Companies prefer the devil they know to the devil they don't know, and once they have confidence that you can do the tasks you say you can do, when you say "let me take care of it for you," they'll let you take care of it for them. If you keep acquiring new skills, sooner or later some of those new skills will be marketable skills.
When you're trying to get a job, it's very hard to get away with saying "Well, I don't know C++ but I'm sure I can pick it up because I know Smalltalk, which is another object-oriented language." When you're inside the company and they trust you, it is much easier to get assignments for which you can make the case that you may not be a perfect fit, but you're close enough.
"How to Do Nothing," kids activities, back in print!
The problem with books is that most people learn by doing, and toy problems don't teach you what a real application is like.
I'd suggest picking an open-source project and doing something with it. Depending upon the type of programming you want to do, add something to Linux, OpenOffice, or any of the number of Java-based things. (I'm currently working with the Sakai course management system. There are plenty of things that need doing there.)
The languages aren't any worse than what you're used to. The problem is that real programming these days tends to involve lots of complex libraries and frameworks. Those are hard to learn in the abstract, which is the reason for my advice.
Whether it make sense for someone to (re)enter programming as a job I can't say. That's a decision for you. There are a lot of problems with the profession. But there's also lots of important things that need to be done, and a lot of the people who think they're programmers aren't up to it. Programming approaches are changing often enough that skills go out of date in a few years. That's both good news and bad news for people like you. Since people have to learn new techniques all the time anyway, it's not like you have to relive the whole last 30 years.
The language depends upon what you want to do. Systems software and desktop applications typically use C-based stuff (C++ is probably the best place to start, although Objective C and other things have advantages.) Web applications use Java or .NET. I'd probably start with Java. You can find real and interesting applications in just about any language, so you can argue for Python, Ruby, and all sorts of other stuff. But C++ and Java are probably the place to start. I keep hoping that there will be some major new programming technology to use multiple processors / cores well. But there are lots of nice demos, but so far I haven't seen an approach that looks like it's going to really take off. That's really pretty discouraging. I wish things were more different from when you were programming. C++ and Java are only slight improvements on what you're used to. It's really the libraries and frameworks that are new.
If you're thinking of web-based work, I strongly suggest learning Javascript and at least one major Javascript programming environment (e.g. jquery or one of its competitors). UIs are increasingly moving into Javascript.
Typically the older coders grew up in a much more structured environment - we were expected to know the theories of programming much more than today's coders. Not a put down for anyone; times have changed.
The only place I know of for old coders with old skills is in embedded linux. It's much the same attitude - squeeze a lot of performance from a limited box. And GUI skills don't really matter.
So start with busybox. Tear it apart, put it together, submit some patches. You'll find you're not so rusty.
Then find an embedded project you want to work on and contribute. Forget about working for someone else; most companies these days don't want anyone over 35.
Set yourself up as a specialist consultant. Embedded systems, old systems, IBM stuff that's still out there. COBOL is still in demand and coders, good ones, are getting consulting jobs. Not permanent jobs, mind you, consulting jobs.
Do what you know and build on it.
I managed the transition using formal training offered through my employer (about 2 years part time study at night), and then through on the job training (trial by fire). So step 1 is to get an introduction to OO programming through a local university course, then decide what type of work you want to pursue (web-oriented, database, ...). Then take the courses available for that. The actual work experience is where things all come together, no matter how many classes you have had or books you have read. I stumbled around a bit my first month, but at the end of a year I was pretty confident I wrote good code and made good design decisions. If you can't get a job using your language of choice fresh out of training, find an open source project in that language that interests you, and then dig in and help for a few months. Listen to the other project members when they critique your work, and try to find a someone local with good skills you can bounce ideas off.
As a side note, I really enjoy working in Java much more than I ever did in Fortran, and I think I am much more productive in java than I am when I work in Fortran. I still do Fortran work - there are tons of legacy codes that we still use as mainstream analysis tools, and that will probably not change in my lifetime.
Learning a new language is a matter of semantics and punctuation, not logic. I'm a firm believer that once you have an understanding of logic, adapting those skills to other languages is a relatively simple process. A for loop, logically, is the same in C, Java, BASIC, Visual BASIC, C#, AGOL, FORTRAN, Pearl, Ruby, COBOL, or any other language.
Java gets a lot of criticism for its sandbox attitude, but that lets it enter the realm of idealism more than other languages. In my opinion, that's exactly what's needed for a programmer new to OOP. As I said above as an AC (damned checkbox), learn how to use and think with objects first, then apply the old knowledge of algorithms to get the most out of your abilities.
You do not have a moral or legal right to do absolutely anything you want.
Just be glad we haven't shifted into an entirely different paradigm like functional or quantum. Multi-threading or cluster-computing is about as close as you'll come to weird tricks. Other than that, loops are still loops, conditionals are still conditionals, and functions are functions. You'll figure out the details without issue.
If you're doing it for fun and the feeling of being useful instead of money, forget about jobs. Just pick some open source project you like and start hacking right away. Either way, don't forget to check out new coding tools as well as new languages. Version control systems for example went a long way from the 80's and you should definitely try GIT or Mercurial.
Make magazine is full of weekend projects and the people who write the articles all have their own dev environment preferences. Why not pick some projects that sound fun and use the instructions as a tutorial to walk you through whatever language that person preferred? It sure beats getting frustrated at a language/environment because it's getting in the way of your own project and then you get some fun stuff out of it.
The best way to learn is to start a project.
Get a book or read tutorials and start coding.
Many programmers don't use gui's to code and if they do, they typically only care about syntax highlighters or auto-complete.
You may like python... it is my favorite language now.
Processing.org is a pet-project producing machine, great for easing one into OOP as gently as possible.
Moral of the story? Do whatever they pay you for. Learn some OO stuff - always handy - but you'll find your skills and knowledge transferable from language to language (this is sorta like today's Poll - and the same applies. Fancy that).
"The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
I've noticed that programmers from the older generation sometimes have trouble getting over the GUI hump, mainly because it is a different way of programming, and it can be a bit painful to think of things differently. Some give up completely and never learn GUI programming. Don't do that. Realize that it's not really a huge hump, and after a little work figuring out the different paradigm and the function calls and tools, it's not hard (and once you learn one GUI toolkit, all the others become cake).
Another thing I've noticed, as I and others have gotten older, you have to pay more attention to your health. Learning is a physical process, and involves growing new neural connections, maybe even new braincells. If you want your body to do that easily, you've got to give it the nutrients it needs, so make sure you eat healthily, sleep well, and if you're low on energy, try exercising.
Qxe4
I'm an old techie too, old enough to have once been hacking out device drivers on 16 bit cpus. The bad news is that the industry has gone to hell since your last experience in it. Remember how you were practically revered by non-tech people for the magic you could do with those machines? How you made almost as much as the suits? Well, no more, the vast bulk of developers are just commodities now. And as another poster remarked, companies seem to want fresh n00bs right out of school who can do a seemingly passable job and are willing to work for nothing. Oh, and remember working independently, doing things from A-Z your way and doing it fast and well? You can forget that too, developers today are pretty much harnessed together to the same wagon via a "software development methodology". Every few days it will spit out a morsel of work for you to program and you'll get another one when you're done. Welcome to the machine. Pretty much the only fun place to work anymore is at a start-up and good luck getting a gig at one of those if you've got a gray hair on your head. Now the GOOD news is that programming is just as damn fun as ever, more fun than back in the dark ages. There are a lot more interesting languages to choose from. The more popular (lucrative, corporate) ones such as Java and C# share much of their syntax with C. My recommendation however, if you don't need to make $ ASAP, is to get going with a so-called scripting language. They're just plain FUN! I love programming in Python but Ruby would a reasonable choice for you as well. Your main tool will just be a text editor of some sort, no compiler, no virtual machine runtime. If you feel the need there's good IDE support for interpreted languages these days. And don't think that these languages are toys. They power a whole lot of commercial and OS applications I find that the best way to approach what seems to be a challenge is to find a way to make it fun rather than a grind. Exercise is the same way. If you hate the gym and those treadmills, just go for a relaxing five mile walk every evening. If you want to get hip to programming again, pick a lightweight, FUN scripting language, get an intro book to get started with, and you're off to the races.
The man who dies rich dies disgraced. -- Andrew Carnegie
But I don't use any fancy tools besides C, vi and gcc. I don't know anything about agile programming or any other methodologies. Is that still ok?
1. Get back in the game with what you have - meet some people, talk to some recruiters - see what you're likely to need as secondary skills to back up your legacy stuff.
2. Get the introductory stuff out of the way with one or two of those target technologies
3. Get hired as the guy who has the chops with the crufty stuff, and the know-how to interface the iron with the hot shit project
4. ???
5. Retire again (with profit)
If you learn Java you will be gainfully employed, the same goes for C#. If you learn PHP, Ruby, Python or my personal favorite Perl you will be happily employed.
If you are thinking of entering the academic / scientific programming field, which has somewhat lower pay scale but much better benefits and job stability than nearly anywhere else programmers can get hired, then you must include MATLAB as one of your languages. MATLAB looks very much like any other programming langauge (C-ish, Perl-ish, PHP-ish, ALGOL-ish, PASCAL-ish, whatever) except that the types are different and the way one thinks about writing code is different, since fundamentally the basic type is a matrix of doubles, rather than a 32/64-bit integer.
A good MATLAB coder knows the GUI and profiler and can speed up even library MATLAB code by a factor of 2. A great MATLAB coder knows how to use the GPU / IO / realtime extensions.
Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
I really like Python. It is cross-platform, Open-Source, and has lots of contributed modules. Really fun too. The creator was a fan of Monty Python, so tradition has programmers embed "hints" to the comedy in their code. As a scientist, I really find the numpy, scipy, and matplotlib add-ons indespensible. There are also modules that have bindings to popular databases. I like the MySQL bindings...
Not to troll but this is a stupid question.
How did you get into pascal and COBOL?
Just start as you did back then it's the same thing with different tools. The best thing to do is to think of a small project or program you wrote in COBOL and look up an sdk for a more current language and re-write it. Then don't stop. As long as you can maintain your self motivation. You will get along fine you obviously have a good skill set to base your new learnings around. Take those skills and apply them to a new technology.
Without a proper understanding of how the concepts have changed, you cannot understand these languages and you'd never know where to begin.
.NET, Python, you name it. It's being run through an interpreter. It's the stuff we all turned our noses up at 30 years ago (around the time I first started getting into programming, anyway, in the very early 90's). These new languages almost force you to write inefficiently (by your standards). They take away the efficiency of pointer arithmetic, bcd, segmentation, and other tricks you could do to shrink your code down. Efficiency, these days, is how fast it runs, not how much memory it requires. Wrap your head around that concept because it's the most fun thing about modern development (unless you're really OCD about memory management, of course).
.NET C# or VB on WinMob, and either C++ or literally HTML+Javascript on webOS. Heck, even Blackberry OS is basically Java-oriented. My advice is to code out a hello world for whatever platform that strikes your fancy, and see which one is easiest for you to "get". Just because a platform is "hot" in the mobile space doesn't mean it'll stay around...I've been doing this stuff for over 10 years, and the only thing you can rely on in mobile is that whatever's big now will be on the downside soon enough. It's always been a big pitfight in mobile. Just pick the platform you like developing for the most and stick with it, maybe branch out if it's lucrative enough, but don't count on anything sticking around.
First and foremost, pick up a book on object oriented development. Read it, draw diagrams, do some of the examples. Start with C++ and get the basics.
Second: Don't be afraid to write inefficient code (by your standards). Kids these days don't understand how things were in the 80's when 512 bytes of binary size could demand a near rewrite and massive refactoring. A lot of this stuff is virtualized, like
Now, jump into a language. I'd take C++. Most languages derive a lot of their concepts from it, and if you get solid with it, you can pick up most other languages fairly easily. Get a book on design patterns...it'll help prevent you from knotting your code up too badly when you jump into your first project if you can pick a pattern or two that fits what you want to do and implement them.
Last, mobile coding isn't what you'd think it would be. It's closer to web development these days than it is to desktop development. Maybe 10 years ago with Palm OS you would have been able to dive right in, as it was single tasking, segmented 64k memory model, and you could write everything in good ol' C. But since then, mobile platforms have gone all over the map with various ideas. Where you have basically Appleified C++ on iOS, you have non-standard java on Android,
As I understand it from the guys I work with, ABAP (the language used with SAP systems) is basically just a database-integrated version of COBOL.
(In the same way Oracle PL/SQL is a database-integrated version of Ada)
There's big demand for ABAP people generally, and most of the people doing SAP programming are pretty ordinary so it wouldn't be hard to compete if you are an intrinsically good programmer.
It's worth investigating...
Dying languages can be extremely valuable.
While Drupal is PHP and as such some here will snicker at it if your motives for reentering the field is profit then this is where the money is. The global demand for good Drupal coders is WAY higher than the supply and if you are a seasoned hacker, learning PHP is almost just adding $ signs before the variable names in C and getting used to the server-browser separation. Good senior software engineers who know how to deliver instead of being a junior code monkey are even rarer.
I live in Longmont, Co and there are a *ton* of harddrive companies around here. Many of them hire for embedded programmers (mostly C and C++). If you know Pascal, C is not a big jump away. Also, I used to work at a weather research facility and there are tons of scientists there that all write Fortran to do their weather modelling. You'd still be very useful in both of those fields. Search harddrive places and harddrive controller places - all very 'embedded programming' friendly.
Good God, if you really can't figure out where to start, you really are too old.
That is all.
I'm a dozen years down the same track, though was a lot less intentional when I got back on that horse. Twice, I swore I would never learn another programming language, initially liking the look of C but feeling past it already then looking at Forth and immediately swearing off reverse Polish. I could not have been more wrong. All it took was the right incentive.
Having privileged very early access to a LaserWriter with the tangible reward it provided of high resolution dots on a page very quickly had me at the leading edge of independent PostScript development, but that morphed into a business opportunity and I again moved on, though at least with any barrier to thinking about the previously, to me, obscure notion of graphical programming thoroughly erased. (There is an aside in there about GW Basic and the false hopes it gave me that VB might be the way to go with some legacy Fortran, providing my final disillusionment with anything M$.)
Having spent a decade getting paid more for words than for code, I found myself doing some CGI tweaking with Perl which I soon came to see in its c.1998 incarnation as being the ideal language for an ageing coder to return to. A young colleague's accelerated learning soon dragged me through Perl's object model and MySQL, but there I've been stuck for a decade, still waiting for Perl 6 and earning an ever-decreasing drip feed enhancing a system I designed long ago ... largely through choice as I place other values on whatever productive time I have left.
An aside on SQL: once you accept that it really does very little, it becomes a handy way to deal with lots of stuff. Nowadays I spend as much time writing queries as I do writing Perl 5.
Given the chance to choose again today, I'd focus on JavaScript and keep waiting for Perl 6.
-- Our systemic servants do not good masters make.
I too was a COBOL and Pascal coder in the 1980s, but wrote mostly in Assembler, then C, for airline reservation and travel automation systems. In the first half of the 1990s I was writing less code and doing more "analyst" stuff. I got a consulting job in 1995 which forced me to upgrade skills and learn configuration and scripting for Solaris, OS/2, Windows NT/2000. I then worked as a secondary researcher and essentially did no coding, but read and did self-study, including studying Linux. In 2000, I went back to university and learnt Matlab, and at the same time invested in my first Linux distro: SuSE Linux 6.3. I subsequently obtained a job at the uni which required me to learn Fortran 90. For my masters project I taught myself C++ by writing an open source library, GluCat. In a later job, I had to quickly learn Labview, IDL, Java and MySQL. I am now a postdoc. My teaching now involves Python and Scilab.
My point is, if you know how to program, you just pick up a language manual and do it. Preferably do it using Linux, where you don't need to pay for compilers and tools, and the documentation is all on the DVD or on the web. Sure, the learning curve is initially steep, but if you give yourself some credit, you can get started. As a next step, start your own small open source project on SourceForge, or join a simple, small project. I have found, as a coder, the large projects seem complicated and hard to get my head around.
If you develop apps for the new iPhone, can I put in a request for an app that uses GPS to direct you towards the nearest public phone box.
Thanks.
You'll find getting back into the field, to program in high level languages with all of your previous experience outdated, to be very difficult. Companies will not want to pay you the salary your years of experience would warrant, and it would be like starting over.
Instead, the method back in that I've found for those of us who started in the "old days" is to go for embedded systems development. The embedded world uses 10+ year old technologies, so your experience with assembly language programming and writing software for systems with limited amounts of RAM and storage space is a big plus for embedded systems development. There are plenty of companies still creating software for processors that run at between 4 and 20 MHz with anywhere from 256 bytes of RAM on up to a handful of kilobytes of RAM. I've found this sort of development work is much more interesting, anyway, and people with old school knowledge are considered more valuable, rather than a dinosaur, for such work.
To stay on top now, you have to be aware of the advanced concepts coming out of functional programming languages. But moreover, you have to get good enough with those languages that it starts to effect how you write java/c#/c++ etc etc. I recommend getting down with Haskell or lisp and choose some industrial languages after you're comfortable with them.
If you want to get current, you should start by making a sample web page. You need a face for your programming skills, a portfolio of sorts.
You can either pay $5 a month for a domain and hosting services, or just set up a linux box, install apache and php, and use a free dynamic dns from dyndns.org. If you pay anything more than that for a personal website you are getting ripped off.
The modern web languages would be HTML, XML, Javascript, CSS, PHP, SVG. Excellent simple tutorials for all the languages are found at w3schools.com
If you want a greater challenge, I would check out a few mobile platforms. Android and the iPhone OS. They have excellent sample applications, and terrific tutorials on their SDK websites (developer.android.com and developer.apple.com/iphone). They both require a modest developer fee.
The languages for the Android SDK are Java and XML. I tend to just use Java for the initial setup, and use the NDK (native development kit) for all my complex programming in c++. The main language for the iPhone OS is Obj-C, but since it is just a stripped down and dressed up version of unix, it uses a gcc llvm, (plus many other bsd utilities), so you also have C++ at your finger tips. For C++ check out cppreference, and cpluplus.com for info. I would not write any more obj-c than what is in the sample applications. Any cocoa framework information is found in Apple's excellent online and offline documentation.
If you want to get into some desktop application development, I would check out Qt (qt.nokia.com). You can either go the Python or C++ route. I much prefer C++.
The libraries to start with should be OpenGL/OpenGL ES, GLSL, OpenCL/Cuda. There are some outdated tutorials at nehe.gamedev.net, but devmaster.net and gamedev.net are excellent resources. Also, Nvidia provides an excellent GPU computing SDK for cuda and OpenCL, with lots of samples and documents (developer.nvidia.com/object/cuda_3_1_downloads.html).
WebGL will soon be the standard for online gaming. If you do not want to learn WebGL, you could check out GLGE. (www.glge.org)
If you do not want to learn OpenGL, GLSL, which takes a lot of graphical theory, then you could try out Ogre (ogre.org). It is an excellent starting point for graphics developers, though a lot of the time it is better to just code it yourself than deal with a lot of the constant changes to an engine that are out of control. Even the simple act of changing a class declaration from a lowercase to capital can be such an annoyance. Plus you become dependent on lots of unsupported aging extensions.
Another popular skill is writing python plugins for open source or commercial graphical applications (blender, xsi, etc).
If you take any of these suggestions, consider yourself a contemporary developer.
If you have become windows dependent, I really suggest you start playing around with a linux distro. I'm sure you are familiar with a CLI style interface. Check out Ubuntu or OpenSuse. If you really really want to develop on windows, then checkout C# and DirectX, which are the popular tools for windows. msdn.microsoft.com is the site to use for information.
If you want to use an IDE, I suggest Eclipse, X-Code, or Visual Studio Express. But emacs and vim are still the popular choices for most developers. I prefer vim.
All the OP wanted was some more modern hip developers tell him what languages he should learn. So much ugly negativity. Anyone can program, at any age. I hate that we make it such an esoteric cynical society for which we must have a "no homer" membership to join.
Development has become so well documented online, that I bet I could teach my nephew to program before he even learns to read. You do not really need to be able to read. You only need to know how to copy and paste. Not that I condone it, but most developers become dependent on the action. Make sure you understand the difference between LGPL, and GPL. Most people do not understand that they are suppose to contribute back any changes, even in the academia environment.
There's something a little odd about this question. Mentions the volume of code output from his past life, but not the application domain. Seems to have weak Google skills. Not sure how he managed to post this query to an electronic discussion board. Did he dictate to his grand-nephew?
Having expertise in an application domain would be a good place to start. Then figure out what languages have remained relevant. But I get the feeling his former application domain is in the same state of decline as his programming skills.
With that list of former languages, the guy *ought* to have a fairly strong skillset for maintaining write-only Perl scripts (write-only code was a major industry back in the day), and I figure there's some demand for that. It would be a good transition language: old school mindset, old school syntax (uglier than most), but with a post-Algol dynamic execution environment.
If he can get over the hurdle of the moderately complex program that use to run in 50k now requiring 50M, he'll do OK. If not, he should try his hand at embedded. I've never written a line of code for an AVR that I couldn't have written (conceptually) with a C compiler from 1983. Those early microcomputer C compilers were riddled with trivial bugs. I recall a fairly simple C static variable initialization (more than one nesting level) the compile mis-generated. That wasn't uncommon. It's been a long time since I've had to report a major code generation error in a C compiler. It's the same skill, minus much of the grief.
The other thing that changed is that I no longer schedule lunch around a global recompile. Certain of the old-school time management skills have gone by the wayside. These days, it's your computer that goes to lunch. Between keystrokes.
Hey there old guy, while you were cranking out 100,000 lines of code, did you acquire any documentation skills? Those older code bases he's equipped to maintain often go along with old school formal management processes.
The biggest change from then to now is that you simply don't know what you're doing in most modern development environments, not the way one used to. Competence is a bubble of lantern light you carry on your person as you trudge into dark places, with one screen tethered to the internet. It's humanly impossible to learn PHP without constant recourse to a memory aid, if your memory is filtered on sanity. New kids won't even know what "filtered on sanity" means. It's been way out of style since Microsoft introduced us to the glories of central planning. In the 1980s, I knew *every function* of my favorite program editor. Often I knew every command line switch on the compiler I was using. And every function in the API I was programming against. These days, I don't even know every line in the context menu that comes up on a simple right click in Eclipse.
The other sea change one has to master is letting your tools do more of the work, whether it's unit testing, make scripts, or an IDE.
A fairly debilitating liability at the outset is not having a good sense of what is supposed to be painful, and what isn't. The rules on how productivity is gated have changed substantially. Long ago it was possible to put in a super productive week banging out a top notch utility library suited to the compiler and application domain. You'd be hung in the modern workplace for losing a week on an HIH detour.
If he's a bit more adventuresome, despite not mentioning Forth on his list of skills, he could do a lot worse than buying himself a Lego Mindstorms NXT and a copy of WoW and investing some quality time into Lua. The C side of Lua is anchored in the old-school skills he seems to have in abundance. He won't have a job at the end of play time, but he'd manage to bridge about half his generation gap in the process, and he mig
Actually if you sharpen B, (go up a semitone) you end up back with C
Not quite, although not all instruments are capable of making the distinction.
Quidnam Latine loqui modo coepi?
One thing that worked well for me is taking classes at UCLA Extension, even working for a certificate. Admittedly the classes are usually pretty lame, and you'll find yourself cruising through them for the most part. It's not the classes themselves that you get most of the skill from, it's just doing organized work in the language, and all periphery skill you acquire along the way. I do much better with scheduled in-person classes that have real homework than with online stuff.
I don't know whether you've gotten caught up in the UML/"design lots of patterns"/"writing code is for suckers" hoopla of the late 90's early 2000's--as if you didn't, you'll have a much easier time learning state of the art in development, while being able to apply enough experience from your younger days. (Consider everything that has to do with J2EE Enterprise Java of early 2000's as an example of what not to do.)
If you want to become current, you are going to need to learn to do:
1) Test-driven development
2) Write clean, expressive code (with much less need for comments and documentation)
3) Object-oriented design, as used to solve actual problems (not just putting functions into classes)
4) Design for what you need now or in the immediate future and refactor only as needs change
5) The Do Not Repeat Yourself principle. No duplication or copy/pasting.
The best advice I give to any starting out developer these days is to read Robert Martin's book Clean Code. It distills the wisdom of many an experienced programmer into a clear, well-explained format. It's Java-centric, but principles apply everywhere. Read it and see why separation of concerns is good, why keeping your functions at the same level of abstraction is good, why the single responsibility principle is good.
That book is the first book that explained to me properly why I should give a crap about the Law of Demeter. That law has been around since 1987 and yet I rarely came across anything but explanations with sterile, academic examples. Yet, "Clean Code" showed me why it's bad in closer-to-home terms AND, best of all, instantly provided a rewritten version that didn't violate the law and was clearly better.
One important point: it's not the languages you know, it's whether you know how to code well, design well and analyze problems well. All languages are just tools.
Modern development has finally stopped pissing over code and began respecting code. Gone are the days of trying to make UML diagrams generate Java (Model-Driven Architecture seems to have successfully passed us by without doing too much damage). In the web apps world, I think Ruby on Rails exemplifies latest thinking in software engineering, namely the thinking of "less code = better" and how to add abstraction layers without imposing code overhead in your application (e.g. convention over configuration).
Computers are still pretty much the same, most of them still use the VonNeuman architecture
Logical problem solving is still the same
Learning modern languages should be easy..Question is, what do you want to use them for?
If it's a purely academic exercise, to sharpen your mind, pick one of the functional languages, or lisp, or scheme
If you want to do web stuff, Java, Javascript, Php,
For embedded systems, C is still king, but C++ can be used as well as long as you keep it simple
Most of the leading open source stuff is C or C++
Lots of custom business stuff is using C#
And python is just plain cool
If you have a lot of free time, learn them all
Least Squares.
Wall Street firms (and NSF) are all head-up-ass about Auto-Regressive-Moving-Averages (ARM).
If an "Old School Guy" could make a play on Least Squares, and sell it, then
a wounderfull thing would happen.
The Monkeys (on Wall Street) and Baboons (at NSF) would have to eat shit, yet again, their own shit, with a .. Chianti ... Sssss.
Then find out what languages/tools are commonly used in that sector. The goal of "update ... skills for Windows, iOS, or Android" is a little broad. Just deciding "Windows" isn't sufficient -- what sort of problems do you want to solve commercially on Windows - server class? End user GUI tools?
Also, there's been quite a bit of change from the 1980's in how most software is developed. Before the mid 80s(?) one was likely to write something that either stood alone on top of an OS or interfaced to a particular proprietary application/system with a fairly limited API. Now, it's much more likely that you will interface with several "black boxes" - most of the time your program/function is executing, the computer won't be running in your code but buried in nested library calls or in other subsystems you call. There are exceptions of course.
Also, the priorities have changed a lot in most development in the last 25 years. Most software development now doesn't need to worry nearly as much about CPU path-lengths and memory footprints as 25 years ago -- the trend of "People are expensive, machines are cheap" continues and has changed the balance a lot. Of course, algorithmic complexity still matters a lot - Moore's Law hasn't yet allowed us to get away with O(n^n) for large n. Internalizing this could be as hard as learning a new language.
Why is there an "insightful" mod and why isn't it "-1"? If I wanted insight, I wouldn't be reading
citation needed bud. MIDI doesn't make the distinction, neither does any instrument I know of, so please back your statement up.
Consider getting a copy of the book "Creating a Web Site The Missing Manual". This covers HTML for building web pages, PHP for application logic, and MySQL for storing and retrieving data. This communicates clearly how to determine what gets executed on the client machine in the web browser and what gets executed on the server(s). It can also help you get everything you need installed on a PC. My sales pitch for doing this first is that you don't need to climb the object-oriented learning curve until you are ready, you can use the knowledge to build a web site for yourself or a non-profit organization, and you will get a small amount of relational database experience. I programmed in Assembler on IBM 360 and 370 computers so I at least understand your question and concerns.
Software doesn't change. The only difference is that it is now easier to get your job done.
Learn Python. Be sure to learn to think in Object Oriented style. Python is not great for that, but it is way better than Perl and about the same as Ruby.
Write a web app using Google App Engine / Python. Learn ReST-ful design. Learn the Rails notion of Model-View-Controller. Learn YAML. Learn to think about semi-structured data (schema-less App Engine Datastore)
Learn HTML and CSS (Cascading Style Sheets).
Learn jQuery / unobtrusive JavaScript. I don't even know much JavaScript, but it is not hard to use jQuery.
Now you know the latest stuff, namely an Agile programing language and application UI as document: aspect-oriented factoring of structure (HTML), presentation (CSS), and behavior (jQuery).
Learn basic Agile methodology.
Do not bother learning Perl; use Python instead.
Rails is a pain in the ass to use despite what people say, but it teaches some good design idioms, such as Model-View-Controller.
Ruby isn't that great; I would use Python instead.
It is going to be hard to avoid learning Java at some point.
Learn the difference between structured data (SQL), unstructured data (bytes), and semi-structured (XML). Semi-structured is the future, but XML is not a human-readable syntax for it.
MIDI is not tied to western scales, let alone the even tempered one.
Everybody seems to treat this as if it's a "what language should I learn", and that doesn't make sense to me. The two big changes I see since the 1980s are object oriented programming and event driven programming. Add those two together and it's a whole different way of thinking about a problem. Just change language, and you'll still be producing 1980s solutions in a 21st century language. I would say that the language doesn't matter one iota, as long as it supports object orientation. C++, C#, Ruby, Python, Java, Objective C, Object Pascal, Smalltalk, even Ada95 at a push -- it doesn't matter. If you're any sort of a programmer you'll end up able to switch between them easily. What will take the effort is getting into the modern way of breaking down a problem. So find a good tutorial on object oriented programming, and learn the language that the tutorial uses. Then find an event-driven GUI and learn the basics of that. If you're on a Windows platform then the version of Visual Studio Express for your language of choice is pretty much a no-brainer. It doesn't matter whether it's the same language as the OO tutorial, and it doesn't matter whether it's the GUI you'll end up programming for. You're not going deeply into either at this stage. The key is to get a grasp of the fundamentally different way programs are put together nowadays. Once you have that, then you can start looking at what languages and what platforms you want to fine-tune your skills on.
Quidnam Latine loqui modo coepi?
The world is focusing on multicore processors to extend Moore's Law, but no one knows how to program for them, except the Functional folks. .NET, then pick up F#.
Take a look at Scala or Haskell. If you absolutely must do
Go play with Python on...
http://ideone.com/
"Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows
to compile and run code online in more than 40 programming languages."
Have a book...
http://www.swaroopch.com/notes/Python
Have two...
http://www.greenteapress.com/thinkpython/thinkpython.html
Have a link to the Python Learning Foundation site...
http://www.awaretek.com/plf.html
Thanks, Timothy, for the entertainment - You stirred up a hornet's nest. I'm probably a contemporary of yours, and you probably remember that the industry has always been fragmented and contentious. Well guess what, it's far worse now! C#, Java, C++, Perl, Python, etc, enthusiasts are all convinced their language is superior to all others. The suggestion to stay with what you know is a good one if all you want to do is make some money. If you want to have fun, though, learn this object-oriented stuff. Don't let them fool you - it is not that easy for an old-style procedural programmer to make the switch. I did it in the early 90's because I had to, but it was a while before I even believed what I was doing was worthwhile. It is worth doing, believe me. Unfortunately, I can't recommend a book which starts where you are - there aren't any. You will either have to get an elementary textbook in C++ or Java and put up with wading through tons of stuff you already know to get at what you don't, or you will have to get a reference manual in your target language and fill in the gaps with on-line searches. It is a hard road, but if you are tired of being out to pasture I suggest you start with C++ and use one of the books by Savitch. C++ is the best vantage point for migrating to any other OO language.
I think you should first decide which platform you want to work on then go for the tools commonly used on that. Platforms are basically Linux, Windows, or cellular/iphone/android. With your lack of tool experience and your absence it'll be a tough sell, so you've got to demonstrate you've got desire and motivation. I would first start working on something and setup a website showing off your work. Put your software on sourceforge or equivalent. Make it seem like you're busy and you've got things filling up your day.
You left out SQL on your list of languages. Knowing SQL is a must for probably 80% of the jobs out there. Try out MySQL or Postgres.
I would avoid pursuing a web developer only job. They are commonly populated by teams with young graphic designers and programmers. I think older people 40+ are discriminated against among those circles.
One other thing. It's been a while since you've interviewed for a programming job. Interviewing has changed a lot since the 1980's. Today there is a kind of interviewing culture (or perhaps "language") you should know about. Long gone are the days when recruiters took your word when you said you knew X, Y, and Z. Today you are generally expected to code on the whiteboard and get into nitty gritty details of algorithms and containers. This can really hit you hard if you've not thought about the material in years. Do some interviewing research. Google, Microsoft, Amazon seem to have the model everyone emulates. Read up on Programming Pearls, Programming Interviews Exposed, and reading list and blogs like codinghorror.com
You should know about the riddle/puzzle interviewing fad that swept the industry between the late 1990's and early 2000's. Ala How Would You Move Mount Fuji. The riddle interview fad has mostly passed (at least for programmers), but you never know if you'll get hit with one.
Camping on quad since 1996.
Really, did the crash hit you that hard or are you bored? I don't know if you understand the employment situation for programmers these days.
Depends on the programmer. Seriously. Not to make up shit, but I'm getting an average of 2 calls every week from headhunters I know for well-paid positions, calling me if I'm interested or if I know people that might fit the bill. I'm happily employed, and the only people I'd trust enough to recommend are employed. People I know that I wouldn't even trust to code a "hello world", those are the ones that are continuously having a hard time getting a job. Maybe for other people, who are truly qualified, they have a harder reality, but from where I'm sitting, if you have the chops, you get the job.
And I'm not even in a place that is known for its plethora of IT/software jobs. And yet, 1) I know people who are continuously getting the gigs, and 2) I know that a lot of positions are being unfilled.
And it's not as if companies aren't willing to pay. It's just that there isn't enough qualified software engineers. There is a shitload of cookie cutter programmers out there, you know, the type who never gets the basics, like why he needs to close a database connection or avoid Java string concatenation. For them, obviously, there aren't enough jobs. But there are jobs out there, companies are willing to pay good for filling them... and they have a hard time filling them in with qualified people.
That there is a problem with the economy is one thing. That there aren't enough jobs for the cookie-cutter programming masses, that's another. You have the skills and you have been intelligent enough to cultivate your professional network, you get the job. Period.
You're going to be old in an industry noted for it's ageism
Cliche. I work with developers who have been working with software for 25 years if not more, people well into their late 50's. I'm not making that up.
behind the curve technologically,
This you might have a point, and the person in question might have to start in an entry level position, but that's his call. But consider this.
Most people that are working with software NOW are already behind the curve. You see people out there that have been doing, say, Java for 10 years and still don't understand why fine-granularity web services are a bad idea. Since the dot-com (and thanks to it) our software industry is inundated with people who can't program for shit, and who expect to get paid $70K out of school just because they know how to code a JSP/ASP page.
I'd rather have a veteran programmer starting up with Java and C# in a junior position over the junior developers we have know. And I know for a fact of employers who think that way as well.
and depending on where you do find a job, you're likely to be paid terribly for long hours and work under a clueless asshole boss.
Isn't that how it for most us anyways? This is how it was 30 years ago, it is what it is now, and that's how it is going to be? The people who work 9-5 are those who work on an assembly line connecting piece A with piece B non-stop. You want to work with software, with finance, with medicine, with law, expect to work long hours.
As for having an asshole boss, you'll get one now matter where you work or what you do. It's life. It's a 50/50.
I mean, fucking seriously, are we really to believe that it likely to get an asshole boss, with likely meaning the majority of times? Are we really that cliche and gullible? One thing I know is that the more people focus (and believe) that this is the case, the more that it is simply a matter of projection, of projecting their own assholery.
Yes, sometimes we get an asshole boss. But other times it is not. It's called LIFE!!! And when you repeatedly hear someone always complaining about asshole bosses, they are actually saying "I'm an arrogant, pr
If you really can't figure out how to talk to people without being an asshole, don't talk again, Frank.
need is C. no pounds, no pluses, no coffee, no snakes, no snakes in your coffee. Just C.
Just put Architect on your resume and your title. Nobody will dare question your skills. Then learn on the job!
Aside from all the interesting suggestions made here already - one challenging area to engage with is parallel processing. Google for CUDA, OpenCL and pthreads for an idea of where things are heading for processing intensive applications, that might once have been the domain of Fortran. Indeed, there is probably a whole lot of Fortran code ready and waiting to be adapted to CUDA, and Fortran expertise a bit hard to come by.
A lot of good comments in this thread already so I will only add one more vector.
The comments are about how to learn new languages/paradigms, and also to try and market yourself as a specialist.
I'd like to add that the days are gone when companies can afford years-long rewrites of legacy systems converting to SAP, etc. Instead of interfaces being built from every system to every other system, just one interface is made to a data hub system that mixes and reroutes everything.
Even if systems do end up being totally converted to new platforms, there is a need to run the old system in parallel for some time (years possibly).
The point being that someone has to build these interfaces. You could be the specialist who gets hired onto a team to do this. If you can get yourself hooked up with a software house that has a chance at getting these jobs then it is possible you would get jobs one after the other in a stimulating atmosphere where you could see what other things are going on today.
I don't think that COBOL is necessarily outdated. I just graduated from university and had a 6 month COBOL training class first thing starting out at an insurance company. I am not using it now (am working with database design) but it is a plus to know. Business is slow to change, particularly since there are things that COBOL does well that there isn't really any answer for with newer languages (and why change something that works, particularly when it costs money).
Those are some pretty disparate technologies you've listed here. Of them, I only know Java and I manage to make a living. My advice would be to first sit down and figure out what sort of programming you actually want to "do" with an eye towards choosing something realistic. Do you want to write thick apps on Windows? Then gear up on C++ and Windows development in general. Though, I'd say that focus probably has a pretty high barrier to entry. Do you want to write business software deployed on *nix? Java's probably the way to go. Etc. Once you know what you want to do, the question of which knowledge to acquire is much more straightforward.
a language is a language. However, I'm not worth a shit with OO or objective languages. However, I can make an assembler stand up and beg. I recommend he fucks about a bit with the hardware that cobol and fortran are running on now, and throw some bullshit on his resume to get past the HR tools.
whatwg.org/html5/
Best resource.
As a child of the personal computer revolution I too grew up with procedural programing sinclar basic, apple integer basic, Pascal and Fortran. although I've worked with Java, C+, Obj C Visualbasic and real basic I've allways felt a little uncomfortable because I never had any formal training in any of them. The Stanford CS classes on iTunes U have really helped me fill in the missing pieces. 80% was review for me but the last 20% helped make the first 80% make more sense. Don't be afraid to start right back at the beginning it will really help.
You don't know about instruments, then. B# can exist in instruments without set note intervals. Trombones are one example.
And get off the citation needed nonsense. Around here, most people actually know what they're talking about.
I've been in music, horticulture, and computer science for 2+ decades. Working on year 25 as we speak, actually.
Still waiting on Serviscope_minor to wake up to fucking reality and realize that Jessica Price isn't going to fuck him.
Easy way:
Figure out which commands are synonymous with your known functions, and code how you always have.
Hard way:
Take a class and learn some new languages. You can still come up with your own coding style instead of doing everything to your prof's methodology. But he'll teach you some optimal ways.
God spoke to me.
I too am 70's & 80's era computer programmer. I was very proficient in FORTRAN and IBM 360 assembler. Among the new languages, I find that PYTHON is somewhat similar to FORTRAN, but more powerful. I suggest that you learn PYTHON
If you are proficient in as many languages as you state, then learning "modern" languages will be no problem.
This is very true. If you know how to code, you know how to code. Especially if you have some familiarity with C, it simply isn't very hard to become productive in Java, C#, Javascript, ActionScript, etc. And even if you don't have familiarity with structured programming languages, you'll find the "modern" languages much easier to learn than COBOL or FORTRAN ever were.
Just start writing code - the ability to program matters more than the language used. Same as it's always been.
Shoot yourself nigger
Submitter is DonLab....Don...Don... DON KNUTH! Is that you? Is this the "exciting announcement you were going to make?
Take the cheese to sickbay, the doctor should see it as soon as possible - B'Elanna Torres, "Learning Curve"
I've been in music, horticulture, and computer science for 2+ decades. Working on year 25 as we speak, actually.
I wonder what kind of job requires you to practice music, horticulture and computer science at the same time. And can keep you occupied for nearly 25 years. I understand doing music for some years, doing horticulture for a few and computer science for the rest, but combining all three of them in a single full-time profession for nearly 25 years just sounds highly improbable. Or do you include a few hours a week as a hobby for a year as full year of experience?
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
You sound like a real bona-fide nerd. If that's the case, you don't need our help.
But you're asking for it anyway.
I say, be a web programmer. You need to learn about 5-10 different skillsets, and excel at all of them, and you never will get credit for it. It sounds like exactly what you're looking for.
Do that and come talk to me in 3 years and we'll talk about you getting a 100% raise.
Just looking at stuff on my personal laptop, I've used Ruby, Perl and PHP, but stick with BASH for most quick scripting. If it gets complicated, I turn to C, and if it gets downright annoying, C++. I like Code::Blocks IDE, because it handles most of my needs. It's not Visual Studio by a long country mile, but quick and dirty. If you're coming from Mac's Code Warrior tradition, been there done that, but not a clue what's current or what's next in that country. Apple has a tendency to get religious about C variants nobody uses in the real world, but that might be a reason to look into their stuff. It looks like the future is tiny apps on tiny platforms, with a distributed scalable model attaching everything together in clouds that don't actually live on particular platforms, but do have to live somewhere. So maybe that's a clue.
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
If you're the type to post a message to slashdot asking for advice, you've probably got no hope.
Take a look at node.js, JSDB, Narwhal/CommonJS.
Javascript is incredibly easy/fast to learn (except for some quirks) and also very enjoyable and powerful. Any of the mentioned platforms should give you plenty of practice and get you up to speed on bleeding-edge asynchronous/event-based programming.
Timothy, Hopefully you read Slashdot from the bottom up like I do. A lot better signal to noise ratio that way!
Consider getting hands on with hardware and robotics and do the programming as well. The robotics field is only going to continue grow. Simple single-purpose robots are common. Think in terms of 3-D printers, Automated labs in a box, Beer brewing machines, CAM robots, etc. All of these are can be controlled by microcontrollers. A microcontroller (mcu) is a true computer on a chip. Even the memory is contained on the single chip CPU. What would be neat about going into this industry is the programming will start out pretty simply--pretty much where you left off in the 80's. This is because the mcu's are still pretty simple (cheap too--you can buy 5 Arduino mcu kits for $50). You can start by building simple robots and go to more complex ones and relearn/transition into the trade as you go. Also as far as programming languages go, you can use BASIC for PIC, C for Arduino and Java is available for some mcu's as well.
BTM
That was the turning point of my life--I went from negative zero to positive zero.
I write system software mainly, basically unixy bits for network appliances, enterprise servers and consumer electronics. I tend to read assembly a few times a month. and my idea of graphical programming is how to access the memory mapped registers to program the graphics controller. I also use zero C++, because Linux and the other OSes I work on are very C heavy. For an old school developer I think C is probably going to feel very familiar to things like Pascal and the various system programming languages of the 70s and 80s.
Picking up Objective-C and writing some iOS apps is pretty straight forward really, and not that hard to pick up. You have to have some talent and artistic flare to be good at it, but it's not that hard to throw up some widgets or draw some OpenGL ES graphics.
“Common sense is not so common.” — Voltaire
a Real Programmer Can Write in Any Language. by omar.sahal (687649) writes: on Sunday August 01, @07:21PM (#33104972) Journal
Agreed, and I really cannot understand this guy who wrote the post story: I program in each of the languages he claims to have used, and adapting from FORTRAN or especially PASCAL is easy to make a jump to C/C++ pretty much, and then JAVA is cake once you've done C++ I feel. Any "real coder" realizes it's not so much about syntax as it is CONCEPTS in programming. You simply have to have a concept of what it is your are out to do, and then, check the syntax or even example code in helpfiles to do it basically! I actually wonder if the guy who the story's about actually really IS a coder in fact because of this. I had to make the same "jump" myself, and even picking up on JAVA and .NET was simple and I came from a FORTRAN, COBOL, ASSEMBLY background! Fact is, imo @ least, the "weirdest" language I've seen lately from the most "newish/latest-greatest", has been Objective C in Eclipse (not crazy about it here is all, it's "different" imo, too different, and other languages such as C++, JAVA, and .NET are just more used from what I have seen on paying jobs at this point from what I have seen).
Those who can't do, teach. Those who can't teach, manage. Those who can't manage, consult.
I wonder what kind of job requires you to practice music, horticulture and computer science at the same time. And can keep you occupied for nearly 25 years.
Tech guy for The Wurzels.
It is unusual to meet a real coder in this day and age :-) (Note for the younger generation of programmers: before you get all emotional about this, please note the ":-)" symbol - this is called a "smiley", and it indicates that the previous statement should be received in a light-hearted spirit)
As for what languages to learn and how to go about it, I'd say C and C++ are the ones to go for. C is what Pascal and assembler should have been in a more beautiful world; if you don't already know the language, I would say you will find it easy, knowing assembler. There is nothing in C that you can't think your way out of logically, knowing the basics of the language; and the majority of modern laguages are built more or less over the C paradigm, so they will be easy to master once you know C.
C++ in many ways the encapsulates the spirit of most modern object oriented languages; this is just my view - I know it is a subject with many emotions attached, and I will probably attract a number of corrective comments. None-the-less, if you master C++, all the other oo-languages will present no difficulty, and although C++ is several orders of magnitude more complex than C, it possesses the same beauty of logical completeness as C. I have often thought something like "... logically I should be able to do so and so, but it seems rather too bold ..."; but it always turns out to hold water.
If you don't want to learn a whole bunch of new concepts & languages, consider working in the embeddded systems/microcontroller area.
The architecture and limited capabilities of low to mid-range microcontrollers will be familiar to 1980s programmers, and your understanding of how to efficiently use systems with limited resources will be a valuable skill. Nobody uses anything more advanced than C to program them, so there are no major new mindsets to get your head around.
If you want a gentle lead-in to web-ish programming then PHP will be a doddle and give you the opportunity to get your feet under the OO table without a straightjacket. There are lots of fun things you can do with it quite easily: Getting to know the front-end of HTML,CSS etc., URL wrappers, and of course interfacing with the database of your choice. Also there are many PHP frameworks (quality and approach may vary) which are an important part of a lot of people's thinking nowadays.
If you want to get more involved with 'native' code then there are so many choices. There are two 'modern' paradigms, OO and event-driven, which are a big change from FORTRAN but not difficult to understand. Java is cross platform and has plenty of meat on if from a programming perspective.
Might I suggest that you become familiar with something 'more modern' but look towards design and management as a mainstream activity.
I figure your skills with old languages, having familiarized you with general programming concepts, should carry over fairly well to new languages, even though there are a lot of changed details.
Old knowledge may lie dormant, but hopefully it will come rushing back once triggered.
I listen to both RIAA and non-RIAA stuff if I like the music, tangential business/politics nonwithstanding.
As some have already suggested, the languages you know are still in use today. Just remember the news about California's COBOL-system http://www.infoworld.com/d/developer-world/californias-cobol-conundrum-067
As to learning languages, I would go about it as I go about learning any new language. I read the first few pages of some manual for it (which you really can just read if it's not your first language), and then start some kind of project.
Also, try to read code by renowned programmers, as they oven write great code and you can pick up one or two things from them.
you simply start a project. ie, a website idea. a small website to do X. then you start asking google questions. for example, you need to do Y at any given moment for the project. all you need to do is to correctly name the operation - ie 'creating an inventory table in mysql'. google it, and voila - you will see there are hundreds of people who did it before you, and with cases too. even so that you may start going deeper and deeper from ensuing links, ending up in random analysis of best inventory table practices in mysql from here and there. of course this is not advisable at your level yet.
you have created a proper inventory table in mysql ? alright. move on to next question. for example, 'inventory website in php'. whoa broad topic. a lot of stuff. identify what is your particular project is similar with, and go deeper in your query. on and on.
you can ask anything you dont know. ie, how to do a mysql query in php. on and on, you will start to learn your language. AND, most important thing is, the most important thing for learning and doing anything, the enthusiasm, will never fade away, because you will always be reading up on the very exact question that is in your mind, instead of having to go through tedious course books that tell a million irrelevant things to the question at hand, until they come to the point you need.
Read radical news here
As Khyber has pointed out, the trombone can make the distinction. All brass instruments can, actually; the trombone does it with the slide, the French horn with the hand position and the rest with the lips. So can all string instruments (unfretted ones more easily than fretted ones), most synthesizers, and, of course, the human voice. The tempered scale that keyboard instruments are usually tuned to is a compromise, and when good musicians don't have to make that compromise they usually don't. I doubt you'll hear a good quality string quartet playing using the tempered scale.
Quidnam Latine loqui modo coepi?
It strikes me that a goodly number of Industrial companies would need support for older software. The cycle is this: A company buys a machine ($0.5M) and runs it for 5 years. During that time, the developers move on, work for the opposition or generally become obnoxious and if you ring up looking for support on a 7-8 year old machine nobody remembers any of it! As for the approach, if you know C, C++ isn't that bad, but wherever you go you need the ability to keep up to date with many languages, and learn what's coming out. I would do an open source project. Adopt a redundant one needing maintainers, or do your own. Then you'll have something to be hired on. People won't hire cobwebs, they need current skills.
I've been developing professionally for 25 years, and used a good many languages and environments in that time, including all of those that you mention.
The vast majority of our development these days is web delivered apps, which in general appears to be the way things are going, certainly in the Enterprise. They might be a bit more work to develop, but from a deployment and maintenance point of view they're fantastic.
So, if you were to spend some time learning HTML, CSS and Javascript, then you'll be in a fine position to develop not only websites and desktop apps delivered through the browser, but also apps for the iPhone/iPad/iPod Touch, Android devices and several others using the likes of PhoneGap or Titanium. These basically act as a wrapper around your web app and give you access to things like GPS, touch events etc. from within Javascript, as well as allowing installation in the same manner as a regular natively coded application.
Of course, you'll need a server side language, and whilst C# and the Microsoft .NET framework are actually pretty good, you'll be stuck with an IIS back end and therefore Windows on the server. The Mono project will give you a fairly similar environment on other platforms, but I've found that you run into minor problems which are an annoyance, and so would recommend PHP, which is a pretty good language that's a natural fit for web development, can be used in a procedural manner (as that is likely what you're used to) or Object Orientated once you're happy with the concepts, and will run on pretty much any platform.
This setup doesn't however exclude you from developing "local" desktop apps, as something like XAMPP (which you'll probably use for your development environment anyway) will give you a pretty small install that includes a web server, database, PHP and various admin utilities, which can be dropped on the user's machine. In a small production environment, you can also use XAMPP on a server. If the size of your installs is a major issue, then there are a number of tiny web servers which can just be dropped onto a client machine, and I set up one a while ago which included PHP and the relevant libraries that came in at under 2.5Mb when compressed.
You may also like to take a look at ExtJS and Touch from a company called Sencha. Whilst there's a bit of a learning curve, these Javascript libraries/frameworks provide you with a toolkit of client side components which allow you to build apps that look and behave in a very similar manner to their classic desktop GUI counterparts, and end-users tend to like that sort of thing a lot. There are other frameworks which do a similar job, but coming from a traditional GUI development background, I found that they gave me a familiar set of controls and a similar event model, which just seemed right.
If you go the PHP route, also consider using something like CakePHP for building your back end. It's a modern Model-View-Controller framework which provides a simple and scalable way to build a model driven back end, handle routing to give your application structure, and maintain a separate set of presentation pages, which depending on your application may simple be dumping out JSON or XML data. CakePHP will even automatically build you a "scaffold" which is essentially a simple web application for administering your database. You'll probably not want to use this scaffold for anything other than testing, but you get a lot, very quickly, for very little effort, and it's a good way to learn how it all fits together.
There are a lot of very good free applications out there which you can use, especially if you choose PHP as your back-end language, and with one exception (a designer for ExtJS front-ends from Sencha which is great for prototyping) everything I use day-to-day is free, and in most cases cross-platform:
- XAMPP (Apache, MySQL, PHP, FTP server, essentially a full server back-end which you can run locally on your machine)
- Netbeans (in my case the PHP v
There are all kinds of different 'coders' these days. They have their own idioms, ideals, tools and culture. You will find people who will try to convince you that Python is the Holy Grail, others will tell you that Ruby is the one true path. (Although usually the story is so over the top, you end up missing the simplicity and beauty of Ruby, all you know is she got "Railed" for three days straight and is now servicing millions of requests, at least when she's not busy batting eyelashes at some Mongrel or really anybody as long as they have a really Fast CGI.)
Most development these days is taking place between all these tubes that make up the interwebs. That means you're usually looking at something that runs on, through or near some sort of web or app server. Set yourself up with a local web server or app server configured with whatever jingles your bells, and get to it. There is no right or wrong way to go about it, and even if you kiss a lot of frogs, you'll eventually find your favorite way to php/jruby/jython/plone/java/flex/lasso/squeak/perl_mod/whatever your way into web programming and Service Oriented Architecture (Which is just a fancy way of saying functions (which are now methods) are actually now web services, that you call remotely (But not like COM or CORBA remotely) but more like REST or SOAP remotely, but at the end of the day they do the same darn thing. Along the way if anyone asks you about relational databases, give them a smug look, shake your head knowingly and walk off muttering something about an impedance mishmash and threaten to hibernate until they propel the conversation elsewhere.
Of course, none of this is going to matter because the world will end tomorrow. Now if you'll excuse me, I need to pack my towel and go get some beer.
Try Visual PunchCard++
Leverage your old school skills, and learn mainframe assembler, too.
Many of the people who knew how to do this are retiring, but the systems and software they built is still running, and requires maintenance. There is going to be a huge skill gap when the rest retire.
there are 3 kinds of people:
* those who can count
* those who can't
C is still relevant today, but things have changed. This is a good start to see what the differences are between then and now: http://varnish-cache.org/wiki/ArchitectNotes
Also, poll() and select() are _way_ out. Take a look at libev, http://software.schmorp.de/pkg/libev.html and use it. It's the easiest and fastest way to write anything that involves a main loop. I sure wish someone would hack glib to use this, it could perhaps improve overall Gnome performance a lot.
Proper hashing has become some sort of science in itself, take a look at this: http://burtleburtle.net/bob/hash/doobs.html . I'm using a modified version of hashbig that operates on aligned pointers myself.
Also, Parrot VM is an interesting project to keep on your watch list: http://parrot.org/ It's a very fast VM and speaks many languages, this is especially useful for code that changes more often and isn't performance-critical.
strncpy and strncat evolved into strlcpy and strlcat: http://www.gratisoft.us/todd/papers/strlcpy.html . If you need to pick an encoding scheme you should use UTF-8. Maybe UTF-16 if you like wchars, but otherwise UTF-8 and nothing else.
And finally, using C99 is ok now, C1X is under way.
In my experience (which is as biased as everyone else here giving advice) your Fortran and COBOL are worthless, if not a little dangerous because the functional programming paradigm runs counter to object oriented programming, Model-View-Controller design patterns, etc. The assembly experience is, on the other hand, valuable because so few of these kids coming into the job market really understand the difference between a stack and a heap, understand what a pointer really is, etc.
In other words, the degree by which your lower-level language experience can give you an inherently deeper understanding of what's going on in higher-level languages may be your saving grace.
If I were to offer a programming language of choice for you, it would actually be Objective-C. (Thus, I would tell you to target iOS for learning your first platform.) It is the simplest superset of C you can find, and it has strong origins to the 1980's, and thus may seem the most familiar/comfortable to you. Given your description of your experience and background, you might be well suited to follow the (free) Stanford iPhone/iPod Touch development course that's available from the "iTunes U" section of the Apple iTunes Music Store. That's an undergrad level course aimed at developing Objective-C and getting started in that environment. And it's FREE.
One last piece of advice to get your head around: make it your mission to write GOOD, ELEGANT code and not prolific code. If I were interviewing you for a job, hearing about hundreds-of-thousands of lines of code would give me the most hesitation. Less is more, and I would want a person who spent 80% of his time thinking about how he was going to solve a problem and 20% of the time doing the implementation. My own experience working with Fortran programmers (in the 90's) was that they rarely understood this, and often wrote GIGO.
Murray Todd Williams
Does it not depend entirely on how you have tuned the instrument? B# in a bizarre avente garde jazz tuning ("hey lets invent some new notes, after g... we could call them h and i. Oh shit! yeah lets decimalise the bastard!") is a significantly different tone to B# in a classically tuned instrument. Now if your talking indian and chinese instruments that opens up a whole world of weird takes on the concept of B#!
again. Shame on you for losing them!
Do a survey of the help wanted ads. The big contenders seem to be C++, Microsoft C#, or for Java. Pick one.
-- Programming with boost is like building a house with lego. It's a cool but I wouldn't want to live in it
Sounds like you've done a lot of procedural programming. Programming now requires a different mindset than you've probably used in the past. I would recommend the following books: Code Complete: A Practical Handbook of Software Construction is a good book to get you started thinking in a more object-oriented way. Design Patterns: Elements of Reusable Object-Oriented Software is a very practical guide and great shelf reference. These will probably be much more useful to you than being told to go learn x, y, z languages: since they will help you write GOOD code in x, y, z.
~ Normality is merely the achievement of the mediocre...
"...writing hundreds of thousands of lines of ALGOL, FORTRAN, COBOL, and Pascal programs"
So, what, like the functional equivalent of 10 lines of Ruby?
And get off the citation needed nonsense. Around here, most people actually know what they're talking about.
Citation needed?
(sorry)
Don't learn PHP or PERL
There are far better alternatives - try eg Obyx ( http://www.obyx.org/ ) if you want to play with web applications.
iPhone applications programming is also pretty easy, and brings you up to date with the modern world of OO, event-based processing, multiple threading etc. - But that's Objective-C / Objective-C++
If you know C, then C++ is also a good start - it probably offers the richest programming environment there is.
This comment was written with the intention to opt out of advertising.
MIDI just calls them 0 to 127. It doesn't give a rat's ass what note is actually played. MIDI also uses a serial data stream, so notes can never be played at exactly the same time, but yet some scores call for "chords" to be played.
--I'm so big, my sig has its own sig.
-- See?
Those old languages were dealing with a different set of requirements than exists now -- Stock Control, Payroll, Accounts Pay/Receivable and so on. Mostly covered by SAP & the like nowadays, I think: anyway, development of essentially 'batch' programmimg has diminshed quite a bit.
If you're more comfortable with the 'back office' (i.e non-gui) side and you favor 'serious' development work, I'd hazard a guess that Java is the way to go. Not any of those noble recent languages, Perl (not so recent) or Ruby or Python. Not C# because, well, who does enterprise stuff using Windows anyway? - plus MS will not be porting it to any other o/s in our lifetime.
One thing about Java: it's a cinch to install. Eclipse is a v. good IDE & there are some 1st class video tutorials for it, where you'll also learn some not-bad Java. (http://eclipsetutorial.sourceforge.net/)
If you go for Java, steer clear of the various frameworks out there until you're good at Java; do get a good book on Design Patterns, whatever you do, Java or not.
One thing about C# -- it's a dog to install, as is SQL Server and the rest of the mongrel assortment of pieces you'll need.
You'll need an rdbms, too: Oracle comes free for PC & it's not a cut-down version. Sybase do the same. As do Berkley, MySQL and just about anyone else. Sybase installs in about 5 minutes.
If you end up learning Java & thinking of adopting some other serious language, you won't have lost out, because your knowledge of O-O will be valuable going forward.
Java + Sybase + Eclipse -- smells good to me!
Best of luck.
Yeah, right.
What's REALLY fun is when the HR people, who haven't removed their cranium from their rectum in recorded history, want a COBOL programmer who is under 30. "Yes, I see that you have 5 years experience(I lied downward by 10 years, I have 15+), but we're REALLY wanting to give a up and coming programmer a chance, do you know anybody with, maybe, 2 years experience?"
"No, I'm the only COBOL programmer I know under the age of 50."
"Oh, OK, thank you for your time.".
I suggest writing a game. Even if you're not a gamer, cloning Tetris or Pac Man on modern hardware isn't trivial and can help you learn the ins and outs of multiple different aspects of the system, from graphics to sound to file IO. Also, if your plan is to target phones then I highly recommend the Corona SDK. It's in beta right now, so there are still odd issues with it from time to time, but it's a simple API with enough power for most small projects and you'd be able to target multiple phones in the end. Lua is an interesting language, but protects you from a lot of the more tricky bits of languages like C++. There's also PyGame. Python is (for me, someone in the animation industry), the most important language to learn, and it's powerful enough that I can't remember the last time I had to write C++ code.
- Cloud
I found myself in a similar place recently, trying to relate my former programming prowess (nobody uses Forte anymore.. heck, nobody used it back when I used it!) into a nice comfy development job like I had back in 2000. I got some great advice from my friends though. When a company wants to hire code-monkeys, they either want someone fresh out of college who will work 80 hour weeks for beer and hot-pockets, or they want to go offshore to save money. But as someone with management experience in another field and good people skills and communication skills, I could make the kind of project manager who understands both the tech and the people. While It looks like I might end up doing something else entirely, this advice got me to think outside the box. As much as I love the mental stimulation of coding, it might not be the best career choice.
It seems like you were on the forefront of programming at one time, so it doesn't make sense for you to start now catching up on a mature language. I'm surprised I seem to be the first suggestion for Google Go!
I think your two issues are programming mindset (code today is structured and designed differently from code in the 80's - a lot of innovation is not in programming languages but in how programming is approached.)
Work from your Pascal experience:
- Learn Delphi, this will get you into Object Oriented languages while building off your Pascal experience - this gives you a strength to fall back on.
- Using Delphi, write various GUI applications, this will move you from a procedural style of programming to todays event-driven style of programming.
- Having mastered Delphi, move to C++; the two are similar enough to allow you to translate the concepts from Delphi into roughly equivalent C++.
- Write GUI applications in C++ to see how modern platform APIs work (Qt, win32, wxWindows, dare I suggest MFC?)
- You can doodle with C++ more advanced features (templates etc.) or decide not to bother, however following C++ you can move to "higher" languages like Java and C# if desired, or move toward dynamic languages like Python and Javascript.
- Write a server-app in a few of those; don't bother with scaling any of it, but make sure the code elegantly handles any and all error conditions.
Then you should be in the modern world.
I did a similar thing a few years, and the hardest part wasn't learning languages, but putting many of my intuitions on the junkheap.
I became a powerful programmer in the 80s, partly because I always "felt" the performance issues in code. Multiplies gave me a small headache, additions seemed light; I always knew how the bits were laid out in any program I wrote. All these intuitions shaped every line of code I wrote to be fast, memory-efficient, and self-contained.
I stopped coding for a while, and came back and discovered that these same intuitions were just horribly problematic. Some were dead wrong: multiplication and addition now take the same amount of time, which is approximately zero for 95% of applications. Some were irrelevant: memory is so plentiful that as long as don't do anything stupid, it's infinite--nothing at all like the 48K limits I learned on. And I needed to develop a whole new set of intuitions around the web model of programming--meaning both the technical architecture, and a world where if there's library function you can think of, there's probably some open source toolkit that does it for you.
The good news is not *all* of my intuitions had to be junked. Clean code is still clean; good design is still good design; users are still lovable monsters. And although it took me a few years, I got back up to speed.
It depends in part on how the instrument is tuned, but it's not a strange avant-garde or Eastern thing. Early instruments in Western music were tuned to Pythagorean harmonies, with the notes in simple proportions: 1:2, 2:3, 5:4 and so on. That was great for playing in the key to which the instrument was tuned and closely related keys, but sounded terrible if somebody tried to play in a remote key. If somebody wanted a B# on their harpsichord then they'd get a C instead and it would sound out of tune. Round about the start of the 18th century people started tuning keyboards so that most of the notes were actually a little out of tune in whatever key one played, but not far out of tune in any of them. By the middle of the 19th century musicians had settled on equal temperament, which is based on ratios between notes of log2(12), in which every key is equally out of tune and B# == C. But that only applies to instruments with fixed pitches. Get a good player on a violin or a trombone, or a good singer, and they've no need to play most of the notes slightly out of tune (unless playing alongside an instrument that can't make the enharmonic distinction), so they will play the note that is completely in tune. If they are playing in F# major and the music calls for an accidental B#, the note they sound will not be the same one as they would sound if they were playing in D major and the music called for an accidental C natural. This is one reason string ensembles and brass bands can sound particularly harmonious: if they're good enough they will be playing natural harmonies, not equally tempered harmonies. And that's not down to how they've tuned their instruments, it's down to how they play them.
Quidnam Latine loqui modo coepi?
In general, how many software shops make as much money on sales/licensing as they do on support contracts?
Having come from your world and making the same transition, albeit a little more graduated, I'd recommend Java as 1) the best language to transition into object-oriented programming, and 2)widely used.
OO is really important to understand if you want to do GUI programming of any sort.
Java is also very portable among the major hardware platforms.
Agreed. However, I'd modify this. If the person really is looking at these systems and is interested, but hasn't started on his own, he should just give up and walk away.
Good programmers don't learn in school or from books: they learn things in school and things from books, articles, etc. but they learn to really grasp the thing by working, and they work because they cannot stop themselves.
OK, let's give the poster one more chance: Stop asking for help before starting work, grab an SDK, write a Hello World, expand it, break it, make a LOT of mistakes, read some stuff, solve some problems, THEN ask some questions, and do some more. They you'll either know you can do this stuff, or you'll know just how much you hate it and exactly why. Either is a fine conclusion.
Real programmers program. Bad programmers see holes in their resumes and try to plug them. Don't be a bad programmer.
The bitch of it is, once you step off the merry-go-round you get outdated quickly. "Back in the day" the technology and languages didn't really change very rapidly, and most coding was based on similar basic concepts regardless of language. And, most importantly, the coder was responsible for everything, top-to-bottom (eg: when writing a DOS app in 1988 you did EVERYTHING low-level: disk/file access, memory alloc/management, drawing on the screen in either text or graphics modes, and to do modem comms you wrote your own INT3 serial port handler, AT command parser, and XMODEM handler). Nowadays it's all over the place, and you must be a master of many disparate high-level concepts and technologies.
And the tech world now moves so fast that if you cease to keep up with it as it comes, the initial hurdle is HUGE and daunting.
The big lesson to be learned here is that if you want to be a programmer for the long-haul, you gotta keep at it. You simply CANNOT take some multiyear diversion into being a "freelance analyst and designer" (whatever the hell that is)... stepping off the merry-go-round is professional suicide and, unfortunately, you'll never regain the edge you once had.
That said, an old-head programmer that's up-to-date in their technology can program circles around most of the under-30 set. There's simply no substitute for experience.
If you want to communicate with your fellow programmers, learning to speak their language is helpful. These days, your fellow programmers are in India and China. It will take a lot of work. These are not like the Romanic languages. On the upside, your job will probably go overseas before you hurt your brain too much.
Learn at least one source control system, such as Git or Mercurial. You'll need to be able to share your code with others, and these are the modern ways of doing so. Having a global undo is also very freeing in terms of being able to experiment.
...and take a look at this:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
We have a couple in our state devoted to the Java family of codes. And there are others for all-things-MicroSoft such as C# and NET. I hear ideas I am not exposed to at work.
Many larger cities have a computer monthly newspaper. These user groups are often listed there or in the online versions.
Bruce Eckel's books are very good I think. ... ( I think he's done c++, java and python and likely some more )
Thinking in
There's a lot of rubbish talked about anything new, so I agree with some of the others that doing something practical will likely get you going, and don't discount your existing skills.
The best way to learn something though is to get a job doing it, preferably with some other folk who can do it already, which could be tricky...
Over 40, cs degree '81, assembly, cobol, big iron. "Retired" early 90s. I got back into the business several years ago.
Don't know exactly what you want to do, but here is how I learned the modern industry.
0) Read this http://catb.org/esr/faqs/smart-questions.html
1) Learn/Use linux. This is what got me back into the business. I could have my own real operating system.
2) Learn ip networking.
3) Learn the bash shell, learn bash scripting.
4) Install and experiment with apache and mysql.
5) Learn C. C is the granddaddy of all modern programming languages. This is the best tutorial I have ever found http://www.howstuffworks.com/c.htm
6) learn Google
If you do these things you'll be able to talk-the-talk.
The kids think C is old school, not thinking that nearly everything they execute today includes code written in C. I'm successful because I learned systems from the bottom up, starting with hardware and assembly languages, this is the old guy's edge. The young guys all started with a gui and worked their way down, not saying that is bad, just a different perspective.
We have "production environment" skills, most of the kids grew up with "break it and fix it" on their own personal systems. Again, not a bad thing, but it can be a hard habit to break.
I am not coding for a living, a few years ago I started working for a small hosting company. Working with the 20somethings is a blast, these are some sharp young folk, intelligent, hard working, creative and inquisitive.
I was so excited in the early 2000s to find the state of the open source community. All the software, and documentation I had to beg, borrow, steal, back in the 80s is available free now. I sold my record collection, and invested in a garage sale pc and fast internet.
I do work with windows, but not much. If you are looking for a big corporate, commercial, closed source, or proprietary, environment, I cannot help much. If you just want to get rich, don't start a job, start a business.
I'm just an old geek, who wants to be stimulated, educated, and challenged. I am well paid. I have a side business in case I want to get rich.
First decide what you are writing for, PC, web, or phone. From there decide the best language for what you wish to do. Perl, PHP and some JAVA interpreted code, not compiled (yes I know some JAVA is, but poster wasn't specific.) Not too much has changed since your glory days, save the dev environment handling most of your memory allocation and handling which should make your life easier. The tricks you learned still hold true, looping is still the same and in C++ or C you can still include your ASM should you wish, not sure if C# allows you to do this, I'm still learning the language. I have to say I love C# though, there is alot said about creating an app and not having to include 40 bajillion custom dll's with it. It just works with .NET installed that is the greatest thing. Hats off to MS for getting that one right. Something to consider would be what OS, different OS's will still operate in different ways, this should be taken into account as well. What it really boils down to is preferance, though the language you feel most comfortable in. C# is free from MS, Bloodshed is a free C++ compiler, there's always the Borland set of C++ tools. Of course PHP and Perl are both free. I would suggest staying away from Perl, I love the language but syntax and readability have since killed it for me once I saw how Python was to script in there's no contest there.
I am Bennett Haselton! I am Bennett Haselton!
Really... do you remember all the details of coding from the 80's...??? I started coding 15 years ago in Quick Basic, and I really don't remember it at all... seems to me that you'll be starting pretty much from scratch here...
Interesting post, thanks.
As a former trombonist (tromboner?), I'd just like to point out that, depending on how one tunes one's instrument, it may also be necessary to adjust the pitch occasionally using the lips even with the trombone, otherwise sometimes a 1st position note will have to be played in (near, as all 7 are approximations until a particular note in a particular key is selected) 7th, 6th, etc. position to sharpen it a little. The alternative is to adjust the tuning so that when the slide's all the way in, the highest pitch adjustment to any note normally played in 1st position will be in tune, then adjust the slide to flatten every other 1st position note. I always thought that was a PITA, so used the same method of adjustment as other brass players. BTW, some of us avoid using the slide for vibrato, too, and not just those who also play crippled (non-slide) brass instruments. Somewhat similarly, fretted string instruments can be tuned to the flattest note to be played on each string, then bent to produce the slightly sharper notes as necessary to play in tune. I have never been good enough on guitar to mess with this much, but imagine it could work OK for long duration single notes, and short notes and chords get short shrift.
For a nice example of synthesized Bach played in perfect tune, try Wendy Carlos' "Switched-On Bach 2000." Notice how much easier it is on the ear than when played on piano. My understanding is that some pipe organs have (had) provision for playing in perfect tune in more than one key. How? Extra keys on the keyboard? Anyone care to comment on that? I also understand that well-tuned pianos' strings for particular notes are not all tuned to exactly the same pitch, the resulting dissonance being why I don't care much for slow things played on piano.
On topic: If you're really skilled at all the things you listed, then you know the fundamentals better than 95+% of the "modern" programmers out here. Just get comfortable with encapsulation and event-driven programming notions, then pick a project that interests you and Google for tutorials, reference, whatever you need to know to learn it. I absolutely disagree that one needs to learn C#. My advice is to avoid "managed" code environments. Black boxes for which you can't fix the bugs are still bad news. C# beats the poop out of VB (because it's not BASIC), but isn't normally run by browsers without executing ActiveXs or something. Just use ECMAScript, or Java if you can ask or require the browser to have a JVM enabled.
Just FYI. I know, "practical extraction and report language" and all that, but you're allowed to lowercase it. perl.org certainly does. leaving it uppercase only risks people thinking you don't know what you're talking about.
It'll be fairly easy for you to pick up the new languages, but it is also important that you pick up the new concepts and terminology that are pervasive in the industry now. If you only used imperitive languages, object oriented design terminology will be foreign to you, but is nearly ubiquitous now. I work with several people who have failed to keep up with the times and we practically communicate in smoke signals. The inherent patterns and intentions in third party API's fly right over their head and they struggle for days to recognize the subleties.
this is Slashdot. A hundred people on this board will tell you that object methodology and design sucks... and some of them may have very good points. Those are the smart ones who grok it enough to criticize it well. The rest are the like the luddites I work with. Don't listen to them.
Check out the "Gang of Four" book (ask Google...) and browse it, then read short articles that reference it. Making sure you understand the pro's and con's of unit testing in modern OO languages. Understand how virtual machines and Just-In-Time compilers work, because they are in everything now, even C.
The first thing you should know about Windows programs (and most if not all GUI programming) is that the programs generally run in a loop (even if your programming language of choice hides this from you) and act upon receipt of "messages" from the OS. You have to program, among other things, what happens when you receive the message that says "the user pressed this button you've made" or "the timer you've set up has ticked" or "the user pressed the close window button", etc... Understanding this basic model will help you no matter which language you choose.
I had to re-enter the market as an a aging programmer, had a hell of a time. You have to have recent, relevant product to show. Worked with PHP for a year on my own, learning web and web services tech. PHP was a good environment for that learning, easy free tools, and very easy to understand, everything is very transparent. Gave me some 'product' to show others also. But now I'm in iOS/objective-C, have a few apps in the store. Objective-C is a little strange, would prefer C#, but no problems once you get going. You can develop for free for mac, or for $100 on the iPhone/iPad. You have an instant distribution mechanism if you want to sell on your own, and the skill base is very hot if you want to work for someone.
You should get comfortable with object-oriented programming as a paradigm rather than worrying about which specific languages to learn. Of course you have to pick a language to learn it in (plenty of clean straight-forward implementations: Java, C#, Python etc.) but if it's the programming model that is foreign to you, focus on that. If you understand the concepts/fundamentals well, teaching yourself new languages should be easy. You never know what new language you'll have to work in or what new ones will be invented but learning how to effectively and quickly learn new languages is invaluable. This upcoming book looks worthwhile: http://www.amazon.com/Seven-Languages-Weeks-Pragmatic-Programming/dp/193435659X/ref=sr_1_1?ie=UTF8&s=books&qid=1280772277&sr=8-1
I never understood this. I knew I wanted to do stuff with computers when I was six years old, mind you at a time before Intel had released the 4004. I was a monger for any information I could get my hands on about computers, and on the way I learned a lot about radios instead, always getting steered in that direction. I did my first commercial work at age 15, an inventory control system for a warehouse that was run by a family member. I learned whatever I could from the resources that were available. I taught myself FORTRAN and PL/I and FOCAL, and the few flavors of BASIC, essentially whatever machines I could get my hands on, and whatever books I could find.
I started college early (very early) where I was advised that there was no future in computer programming (and I still want to find that advisor and cause him some harm.) So I got a degree in fine arts instead (and dabbled in electronic music which was also ignored, even frowned on at the time). I never stopped programming. I did a second college career a little later, after computers were a normal, acknowledged thing, and have worked in the field ever since.
Here's the deal: I don't understand how the OP gets into the predicament he's in. There's not a day that goes by where I don't learn something or at least read something that keeps me up to date. The idea of *thirty years* passing where I manage to not stay up-to-date on whatever is going on in the field, just doesn't enter my realm of possibility. I can't imagine this. I go back to 8-inch floppies, card decks, chain printers, COBOL, paper tape, the earliest consumer microcomputers, etc., and it never occurred to me to stop for long enough for developments in technology to pass me by. Yeah, I've been on the odd vacation and so on, only to come back to find out that technology has moved (that's actually happened a few times). But 30 years? I'm not seeing that, or if it's possible, I'm not sure computer programming is the right thing for a person who can find himself in that position to be doing.
If you don't do your analysis, your design's going to be flawed. OTOH, you jumped right into OOPL in the text without mentioning any OOD methods, so maybe you actually mean pseudo-OOD, first. >;->
Webmaster/It guy for a band that smokes pot would fit all three categories...
... as long as you remember the fundamental limitations of both.
Object Orientation is missing any way of tracking Relationships (instantiated as Connections) which means that most of your code will be making up for that lacunae. (Its a step up from having to write yet another fucking block of code to take care of linked-lists or garbage collection, but its not much of a step.)
Objects embedding other objects just means you got a database navigation problem, not its solution. Consider ALL relationships as fundamentally N:M. 1:1, 1:N, N;1 are just existential cases of N:M. (0->1 is object instantiation, 1->0 is garbage collection and both operations are executed in a context of the relationships the object participates in.)
Think of a brick wall. Bricks are objects, mortar is a collective noun for the gritty stuff between the bricks, but another component of any brick wall is the position of one brick in relation to its neighbors.
Relationships, and their instantiations as Connections, make the same pile of object bricks and mortar object instances into a pallet on a loading dock at Home Depot, a garden wall keeping dirt and flowers from the lawn, and the Cupola of the Piazza Duomo in Firenze.
Use cases suffer from a simple but revealing flaw. I'll use an elevator as an example.
You can make N many use cases all of which are 100% correct and none of which could be criticized in any way when you end up with everybody stranded on the roof because none of use cases for elevator doors included DOWN buttons.
Another example is when you have everybody stuck on the ground floor because none of the floors have holes cut into them to let a cage move from one floor to another.
Software architecture (and therefore all software built using it,) should be generative. Use cases are merely descriptive.
Because all software merely refers to real world objects and processes it is all to easy to discover after spending time and money that you have committed the equivalent errors, which would simply not be possible in the real-world.
MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
How about learning Fortran90, it your used to 77 its a real joy to use (allocatable arrays!). Also it features lots of advanced 'modern' concepts, such as aspects of OO that you can dip into as you want to learn more. I'm not sure what it'll do for your job prospects though, I'm a mechanical engineer.
He only indicated that he was approaching 25 years. He didn't actually say (but implied) it was his job. :)
I guess he could have "worked" in it for all that time. During the day, he could be an IT guy. Nights, he could have been playing it clubs. And on weekends he could have been doing landscaping. That doesn't allow for a lot of time for sleep, but hey, who needs sleep. :)
I could say I've been seriously learning music since 1985, starting with middle school band and private lessons. I'm honest with anyone that asks that there's a bit of a gap between the mid 1990's to 2009. I won't go bragging I've been "in music" for 25 years though. With a bit more practice I may sound like I've never stopped playing though. :)
Serious? Seriousness is well above my pay grade.
Many people here refer to the Bosses and/or PR folks as complete a$$holes. If you go to an interview with that in mind, it will probably turn out to be true. If you go with the attitude that they just might want the best for their company, and you are trying to find ways to help the company as well, your success rate will go up. If you draw a bozo, just be polite and go somewhere else. They may know some programmers who are somewhat challenged socially as well. So try to convince them that you are a decent human being who happens to be a very good programmer. imho.
I transformed my skills into project management. It is certainly not for every old ptogrammer, but I found the transition easier than keeping up with the new development tools/languages.
I took a 1 week class (actually 4 days M-T) followed by the PMI Cert Test on the Friday. If you have spent decades developing, you will have a good shot at passing the first time around. You may find it interesting and close enough to your experience for it to be useful. Being PMP coupled with experience and an interview suit should land you in a good spot.
Slowly waving my hand - "This is not the sig you are looking for."
First of all, do you NEED to find a job in this field, or do you merely want to WORK WITH these technologies?
If they former: a real "job" is probably a non-starter. So is most contracting.
My experience is that employers are generally against hiring the voluntarily unemployed. The long term voluntarily/lifestyle unemployed probably have the toughest path, even more so than someone jobless due to incarceration. Many employers would rather know that you're someone with a record, than a responsible and solvent person who opted out. The point is, to have retired early or to not have worked in the field for years registers as a sort of protest vote. That's the politics of the situation.
The first bit of advice I'd give Timothy is to educate yourself on what programming technology is used with what platform. Pick a platform and then research the language choices.
Then use the summaries at Wikipedia to do a first-order cull of the language choices. Wikipedia is fantastic for a top level view of topics where there is no apparent logical answer from current "experts" to the question "where does X fit in?"
Armed with THIS, you should be able to zero in on a few language choices and hedge your question more productively.
As it stands, this question is so open ended that it's not possible to answer at present. In fact I would say if you can't reframe this question on your own using my recommendations, then you probably can't cope with the "DIY" driven present of SW development.
If you just want to WORK with newer technologies, then you are more in luck. Consider developing and marketing your own product. Google the term "mISV", which stands for "micro-independent software vendor".
Or, find and join an open source project. But you will have to meet the qualifications and vetting process that the project in question has in place.
Learn C.
C++ is just C with some extras. It's quite powerful but not always necessary.
C# is just C with some crap for Windows GUIs. You can pick it up in a week if you are already proficient with C.
Java is useless and nobody makes money with it these days. Seriously, you earn minimum wage writing Java applications because the work is outsourced to India. It is a tremendous chore to write Java code, which is why it is so unproductive. It's like C, but the compiled code is portable which is the ONLY benefit.
PHP, HTML5, or PERL are all for website stuff and nobody should use it other than a webmaster. Don't bother. I know these and almost never use them.
Don't use Swing/AWT, use SWT. Of course, I don't know if the Eclipse UI counts as "stellar" in your mind, so YMMV...
There is no such code in Java (1.4). I speak from bitter, bitter experience.
IMHO as you only know 'classical' programming language you should learn Object Orientation to understand what this 'new fad' is about.
I recommend the book 'Object-oriented Software Construction' by Bertrand Meyer which is very clear about what OO is and why we use it.
Note that the examples are in Eiffel which is a language rarely used, but it's still interesting.
Then 1) check the jobs offer to see which language gives interesting job.
2) learn the language (easy (unless it's C++ or Perl): read a book, maybe contribute to a project) and the tools used with it: IDE, debuggger, profiler.
3) learn the languages libraries: that's the hard/boring part and sorry I don't know how to help here.
You're ready!
The site I work for just posted an article on how IBM is looking to train the next generation of COBOL programmers:
http://adtmag.com/blogs/watersworks/2010/07/ibm-mainframes-cobol-recruits.aspx
(Read down past the laptop stuff in that article). Definitely not saying not to learn the new, just FYI that your earlier skills might have some marketability that you might not be aware of.
"I wonder what kind of job requires you to practice music, horticulture and computer science at the same time."
Research where we can enhance the growth of plants by exposing them to 125hz or 250hz sound waves.
Ah, but hey, You guys tend to focus on ONE thing, I sweep across the board.
Still waiting on Serviscope_minor to wake up to fucking reality and realize that Jessica Price isn't going to fuck him.
No, my musical research enhances plant growth by using classical music rich in 125 and 250hz tones to stimulate the calcium ions resopnsible for controlling the opening and closing of stomata.
Yes, plants *LOVE* classical music. They hate rap and rock and metal of most types. Some jazz is fine.
Seriously, you guys limit your thinking way too much.
Still waiting on Serviscope_minor to wake up to fucking reality and realize that Jessica Price isn't going to fuck him.
I just took a leisurely browse through your recent posts. I think I understand you now.
You grow and smoke pot in large quantites. You restore antique cars that you can't find parts for. You work with high energy lasers, liquid mirrors, and power sources the size of large navy vessels. Beyond playing botanist, physicist, and military weapons engineer, you take the time to play classical music on your trombone for your plants, just a shade sharp on both B2 and B3.
Rather than playing random pieces of music and trying to guess at what frequencies your plants like, wouldn't it be an awful lot easier to just play pure tones?
user@linux $ play -n synth sine 125 sine 250
It does kind of have the sound of an alien spaceship sitting idle though. How loud did you say it had to be?
You could try this one..
user@linux $ play -n synth sine 600 sine 970
Played at 160dB, it's guaranteed to keep away bugs, girlfriends, and alien invaders.
Serious? Seriousness is well above my pay grade.
I ditched COBOL years ago but I have been begged to accept to do jobs in COBOL. Think your COBOL skills are still worth $$$ if you care to use them. If what you're looking for is having fun again, then I would look into one of the .NET languages or Mono for linux (C#).
I'm a very novice hobbyist, so unfortunately would fall into the cookie cutter programmer category if not worse. But one should always try to better themselves, correct?
What would you suggest a cookie-cutter programmer do to improve upon his skills? Any more than just staying in the loop about languages and their advantages/disadvantages?
Doing some reading about Java string concatenation, it seems it's just harder on memory and trash. But the fact that you should know ahead of time that this is an issue would seem to come from a lot of time spent "playing" with different functionality and testing time/memory usage.
So is it all just constant testing/rewriting code or are there basic fundamentals to always look into? As stupid as this may sound, is there a place for collective knowledge about these types of issues and what to look out for?
-A cowardly, anonymous noob trying to be more competent.
There's a ton of money to be made in legacy maintenance. And there's a ton of available work for companies that actually have money. Chances are that anybody who still has legacy COBOL apps from the 70's will be here long after you're retired. I know this because maintenance is about 80% of what I do.
Sure, COBOL, SQL and batch jobs aren't glamorous or exciting, but I don't care because I stop by the client location around 10am and leave by 2pm, and make more money than when I was working 12 hours a day. When I want excitement, I go SCUBA diving and when I want to relax, I take a vacation. I took about 6 weeks of vacation last year
Don't try to compete with recent grads by learning The New Hot Language. It's irrelevant and you'll never be able to stand out. Do all the old stuff you already know (COBOL, etc.). Few people learn it in school and fewer want to do it. This means you can select only the jobs that pay well and make you happy, set your own hours and actually have a life.
Gotta start from XML if you missed that as well.