Over the years, I've programmed Pascal, FORTRAN, BASIC, PL/I, C, C++, Ruby, Python, Machine Code, ASM, PHP, JavaScript, HTML, XSLT, etc.
My longest-term language was C++ (over 20 years), but I now mostly do PHP (Server-side) and JavaScript and Objective-C (client-side).
ObjC was weird to learn (not as weird as XSLT, though), after C++, but I've got the hang of it.
Language (to me) is almost irrelevant. I can learn a new language to a useful level in a couple of weeks.
However, what takes the time, is the framework/SDK/API. That can take years to master.
Scripting languages (like PHP and Python) rely on enormous libraries. These can take a long time to learn, and learn well. They also tend to be moving targets.
I do it for free; usually for NPOs that can't afford programmers. Helps me to learn.
I don't particularly care whether or not it ever becomes "famous" (it won't because it addresses a very small, select audience). I just care whether or not it is the best quality I can do.
The nice thing, is that there is minimal pressure, which is good, as my "day job" gets first dibs on my time.
I don't watch TV. I don't hunt. I don't tweak cars, and I don't like to spend much time tending a server.
I just like to code. I also make sure that I don't write stuff that competes with my "day job." I like my company, and they could easily make my life miserable if I did. I also don't spend much of my "day job's" time on my personal stuff. I don't mind spending a bit of it, though, as they DEFINITELY benefit from my extracurricular work.
No argument there. The issue was that the very first post (and the next 20 or so top-level posts) were political screeds.
We seem to have been trained to look at one another as avatars for political positions first, and humans, second.
It makes one wonder if that might have more to do with the problem than weapons. I'm no gun lover, but I'm thoroughly convinced that we're worrying about the wrong thing, here. Maybe we just need to reconnect as humans. You know, rejoin a Society.
For myself, I spent the first eleven years of my life, overseas, in nations where violence like this was something that happened on a fairly regular basis, and ten-yer-old boys carried AK-47s and committed atrocities that make this look tame.
I'm absolutely fascinated that the original post was actually modded down to 0. It certainly doesn't bother me, as it was really just some basic stuff, but I figured that I'd add a bit of actual relevant content to the n00b-bashing and nerd-sunken-chest-thumping that was going on. I musta hurt someone's feelings, which certainly wasn't my intention. I appreciate someone spending a precious mod point to take a widdle slap at me.
It is quite amusing, nonetheless. We peeples are such crazy critters...
It was a question of configuring it for multiple services, including the various Atlassian suites and a couple of VCSes. Also, I have a day job, so this was all being done on the weekend.
My weekend time is precious. I need it to write code; not administer servers.
I am quite capable of administering a LINUX server, but I'm nowhere near as efficient (or capable) as an experienced LINUX geek.
Server admins are more than welcome to dis me on the matter. That's OK. Because I'm not a server admin. I'm nice enough not to dis back on things like TDD, OOP, Design Patterns, and asynchronous handling.
At home, I run a Mac server as the source server. There are a number of reasons for the choice, but the most basic one is that I have spent, literally, months trying to maintain the services that I need with an Ubuntu server box, and I spend minutes getting the same result with the Mac. I could care less whether or not it adds to my "geek cred." I have plenty of that.
For my Web sites, I run a hosted plan. I did use a VPS (CENTOS) for a couple of years, but it just wasn't worth it. My hosted plan is a "reseller account." It lets me do everything I need.
If I want to get fancy, I tweak the Apache/PHP/Perl/CGI/MySQL/Postgres server on my laptop, and use something called VirtualHostsX to mimic a hosted solution.
However, I like to spend most of my time writing compiled code (as it requires most of my time.
*shrug* Whatever. I paid $3.89 the last time I filled up. It seems only yesterday (before Sandy) that it was $3.40.
It all comes out in the rinse or the wash. I guess you don't deal much with Marketing types. They all think that way. And they are correct. They get results.
Yeah, but I'm too lazy to thread multiple licenses throughout my code. I use a "lego block" coding pattern, with lots of reused code. Just making it all GPL makes for a lot less agita.
If anyone wanted to use the code commercially, they could always contact me (there's lots of info in the project repos), and I could change the license for their copy.
...and they are all GLP2. Thieves are gonna steal, no matter what, so my code out there is free for the taking. I use GPL, only because a couple of other FOSS repositories require it. I'd much rather use the "Take Me, You Gypsy Stallion" license, in which the code is 100% open and free for all. I don't like GPL, because it's a coercive license; every bit as shackled and enslaved as the code the FOSS folks like to dis. However, it doesn't hurt to use it, in my context.
If I don't want people to have my code, then I have a Perforce server that I run in my local network. I have a lot of stuff there, as well.
Our industry is ferociously darwinian. Sink or Swim. Keep up With Current Tech.
I'm really hoping that schools are starting to teach more relevant tech, these days. One of the reasons that I never went back to school, was I had zero interest in spending thousands of dollars, countless hours, and losing sleep, in order to learn technology that was already 5 years out of date (stone age, in tech years), and qualify for a job making half what I already made, and a lot less enjoyable, to boot.
What it really is all about, is classic ageism. Young folks:
Cost a lot less.
Can be more easily moulded to your corporate culture.
Can be more easily fired.
Don't make young managers nervous.
Ah, well. Not that big a deal. I just find the dishonesty in this argument rather depressing. I guess "Honesty" is also one of those "Quaint and Irrelevant" attributes of old folks.
As a tech manager that employs some real, real sharp folks; some young, some older than I, I can say that silly, blanket statements like this are not much more than click-magnets.
This is a story that I got from the Internet (pre-Web), many moons ago:
THE TOASTER
Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. "What do you think this is?"
One advisor, an engineer, answered first. "It is a toaster," he said. The king asked, "How would you design an embedded computer for it?" The engineer replied, "Using a four-bit microcontroller, I would write a simple program that reads the darkness knob and quantizes its position to one of 16 shades of darkness, from snow white to coal black. The program would use that darkness level as the index to a 16-element table of initial timer values. Then it would turn on the heating elements and start the timer with the initial value selected from the table. At the end of the time delay, it would turn off the heat and pop up the toast. Come back next week, and I'll show you a working prototype."
The second advisor, a computer scientist, immediately recognized the danger of such short-sighted thinking. He said, "Toasters don't just turn bread into toast, they are also used to warm frozen waffles. What you see before you is really a breakfast food cooker. As the subjects of your kingdom become more sophisticated, they will demand more capabilities. They will need a breakfast food cooker that can also cook sausage, fry bacon, and make scrambled eggs. A toaster that only makes toast will soon be obsolete. If we don't look to the future, we will have to completely redesign the toaster in just a few years."
"With this in mind, we can formulate a more intelligent solution to the problem. First, create a class of breakfast foods. Specialize this class into subclasses: grains, pork, and poultry. The specialization process should be repeated with grains divided into toast, muffins, pancakes, and waffles; pork divided into sausage, links, and bacon; and poultry divided into scrambled eggs, hard-boiled eggs, poached eggs, fried eggs, and various omelet classes."
"The ham and cheese omelet class is worth special attention because it must inherit characteristics from the pork, dairy, and poultry classes. Thus, we see that the problem cannot be properly solved without multiple inheritance. At run time, the program must create the proper object and send a message to the object that says, 'Cook yourself.' The semantics of this message depend, of course, on the kind of object, so they have a different meaning to a piece of toast than to scrambled eggs."
"Reviewing the process so far, we see that the analysis phase has revealed that the primary requirement is to cook any kind of breakfast food. In the design phase, we have discovered some derived requirements. Specifically, we need an object-oriented language with multiple inheritance. Of course, users don't want the eggs to get cold while the bacon is frying, so concurrent processing is required, too."
"We must not forget the user interface. The lever that lowers the food lacks versatility, and the darkness knob is confusing. Users won't buy the product unless it has a user-friendly, graphical interface. When the breakfast cooker is plugged in, users should see a cowboy boot on the screen. Users click on it, and the message 'Booting UNIX v. 8.3' appears on the screen. (UNIX 8.3 should be out by the time the product gets to the market.) Users can pull down a menu and click on the foods they want to cook."
"Having made the wise decision of specifying the software first in the design phase, all that remains is to pick an adequate hardware platform for the implementation phase. An Intel 80386 with 8MB of memory, a 30MB hard disk, and a VGA monitor should be sufficient. If you select a multitasking, object oriented language that supports multiple inheritance and has a built-in GUI, writing the program will be a snap. (Imagine the difficulty we would have had if we had foolishly allowed a hardware-first design strategy to lock us into a four-bit microcontroller!)."
The king had the computer scientist thrown in the moat, and they all lived happily ever after.
My voting district is small. No issues at all. They have a new system, where you fill in scan cards (up until just a few years ago, they used the wonderful 1950s-"Crank Machines").
However, I think that it's very important for me to be an active programmer, current with the latest tech and, most importantly, process. My work at home, on my own coding, pays dividends at work.
I'm not one these "BOFH Bosses," who doesn't know what's going on. My folks can discuss pretty much any aspect of their coding with me, and I can completely understand it.
Actually, I never said their format is bad; just that mine is better; in many ways, mostly for my own purposes. It has virtually nothing to do with K&R indenting, which was actually invented in the early days of C, when file size was a much bigger issue than it is now.
You see, I write plugins for all three of the "big" CMSes (Drupal, WordPress, and Joomla).
I use a common base class, and about 90% of the code is completely cross-coded. It's a sort of "M-V/C" pattern, with the C and V being mixed up a lot. It's an outstanding way to generate extremely robust and high-quality UX across systems. I've been doing it for a long time, and in many different languages.
I won't rewrite all the code used in the other plugins, just to please one set of folks. They have every right to enforce a common style, and I have every right to release mine on GitHub. The Drupal folks are geekier than most, so fetching the plugin from elsewhere isn't a big deal. It would be more of a big deal for the WordPress crowd or the Joomla crowd.
As I said, it really is all about personal style. However, in all my years of coding, one thing that I have learned, is that geeks LOVE to say "you were wrong", so I'm glad I was able to provide that service for you.
I have gotten used to long, descriptive method, class and data member names, although I don't believe that a lot of "self documenting" code actually is.
It is important to have consistency; not just for others, but also for ourselves. Come back to your code in six months, and try and make heads or tails of it.
Drupal won't let me add my plugins to their repository because it doesn't use the same coding conventions they prescribe, even though my style basically far exceeds theirs.
<shrug/>
Their loss (but they won't roll up the project from it)
I was just giving this matter some thought last night.
I learn faster today, than I did at 20. I suspect that's because my experience gives me a much higher baseline to start learning.
I can learn a new language in a couple of weeks (for example, XSLT, which is a bit of a mind-bender for most procedural programmers). That's the easy part. The difficult part is learning and mastering the APIs and function libraries. That can take years, and a lot of hands-on experience; especially as most of them are moving targets. iOS is certainly like that (my current learning experience).
I manage a C++ shop. I did C++ for a couple of decades. I don't do C++ any more. I don't get paid to code. I get paid to make sure that others code, and make sure nothing gets in their way.
And take the heat if they don't code. Management has its own ups and downs.
However, I absolutely love to code, so I do it as a hobby.
My current passion is writing client/server systems between PHP (server), and JS/JSON or iOS (client). That keeps me plenty busy, and gives me lots to learn.
I'm also learning about usability and UX. The iOS work gives me a great outlet for that.
I guess you never used Pascal, eh?
Over the years, I've programmed Pascal, FORTRAN, BASIC, PL/I, C, C++, Ruby, Python, Machine Code, ASM, PHP, JavaScript, HTML, XSLT, etc.
My longest-term language was C++ (over 20 years), but I now mostly do PHP (Server-side) and JavaScript and Objective-C (client-side).
ObjC was weird to learn (not as weird as XSLT, though), after C++, but I've got the hang of it.
Language (to me) is almost irrelevant. I can learn a new language to a useful level in a couple of weeks.
However, what takes the time, is the framework/SDK/API. That can take years to master.
Scripting languages (like PHP and Python) rely on enormous libraries. These can take a long time to learn, and learn well. They also tend to be moving targets.
I do it for free; usually for NPOs that can't afford programmers. Helps me to learn.
I don't particularly care whether or not it ever becomes "famous" (it won't because it addresses a very small, select audience). I just care whether or not it is the best quality I can do.
The nice thing, is that there is minimal pressure, which is good, as my "day job" gets first dibs on my time.
I don't watch TV. I don't hunt. I don't tweak cars, and I don't like to spend much time tending a server.
I just like to code. I also make sure that I don't write stuff that competes with my "day job." I like my company, and they could easily make my life miserable if I did. I also don't spend much of my "day job's" time on my personal stuff. I don't mind spending a bit of it, though, as they DEFINITELY benefit from my extracurricular work.
That works for me.
No argument there. The issue was that the very first post (and the next 20 or so top-level posts) were political screeds.
We seem to have been trained to look at one another as avatars for political positions first, and humans, second.
It makes one wonder if that might have more to do with the problem than weapons. I'm no gun lover, but I'm thoroughly convinced that we're worrying about the wrong thing, here. Maybe we just need to reconnect as humans. You know, rejoin a Society.
For myself, I spent the first eleven years of my life, overseas, in nations where violence like this was something that happened on a fairly regular basis, and ten-yer-old boys carried AK-47s and committed atrocities that make this look tame.
It always started with dehumanizing other folks.
...is that folks are using this story as a political foil.
18 ELEMENTARY SCHOOL CHILDREN ARE DEAD! VIOLENTLY.
However, the very first thing that people think of is the age-old political battle about guns.
This kind of abstracting our fellow humans into avatars is not something that I particularly like about modern times.
Wow.
I'm absolutely fascinated that the original post was actually modded down to 0. It certainly doesn't bother me, as it was really just some basic stuff, but I figured that I'd add a bit of actual relevant content to the n00b-bashing and nerd-sunken-chest-thumping that was going on. I musta hurt someone's feelings, which certainly wasn't my intention. I appreciate someone spending a precious mod point to take a widdle slap at me.
It is quite amusing, nonetheless. We peeples are such crazy critters...
It was a question of configuring it for multiple services, including the various Atlassian suites and a couple of VCSes. Also, I have a day job, so this was all being done on the weekend.
My weekend time is precious. I need it to write code; not administer servers.
I write code.
I am quite capable of administering a LINUX server, but I'm nowhere near as efficient (or capable) as an experienced LINUX geek.
Server admins are more than welcome to dis me on the matter. That's OK. Because I'm not a server admin. I'm nice enough not to dis back on things like TDD, OOP, Design Patterns, and asynchronous handling.
At home, I run a Mac server as the source server. There are a number of reasons for the choice, but the most basic one is that I have spent, literally, months trying to maintain the services that I need with an Ubuntu server box, and I spend minutes getting the same result with the Mac. I could care less whether or not it adds to my "geek cred." I have plenty of that.
For my Web sites, I run a hosted plan. I did use a VPS (CENTOS) for a couple of years, but it just wasn't worth it. My hosted plan is a "reseller account." It lets me do everything I need.
If I want to get fancy, I tweak the Apache/PHP/Perl/CGI/MySQL/Postgres server on my laptop, and use something called VirtualHostsX to mimic a hosted solution.
However, I like to spend most of my time writing compiled code (as it requires most of my time.
I agree. This is a non-front-page-of/. story.
*shrug* It wasn't meant to be. It was youse guys that tagged it thus.
I'm struggling to see the value of your insult. I'm sure that it is because of my lack of intelligence and ability to perceive insight...
Try this (it works, I sometimes even do it): "I disagree with your statement. Here's why..."
*shrug* Whatever. I paid $3.89 the last time I filled up. It seems only yesterday (before Sandy) that it was $3.40.
It all comes out in the rinse or the wash. I guess you don't deal much with Marketing types. They all think that way. And they are correct. They get results.
1) Make a huge noise about implementing draconian measures.
2) Withdraw these measures after the hue and cry.
3) Propose more "reasonable" measures that will, after the dust settles, actually end up giving more control.
This is how our gas prices keep going up. They jack the prices up by a dollar, then back down 80 cents. Repeat as necessary.
As someone who uses a modular development approach, I can tell you that throwing exceptions across library links is all kinds of fun.
Yeah, but I'm too lazy to thread multiple licenses throughout my code. I use a "lego block" coding pattern, with lots of reused code. Just making it all GPL makes for a lot less agita.
If anyone wanted to use the code commercially, they could always contact me (there's lots of info in the project repos), and I could change the license for their copy.
Yes, they are better licenses. However, in order to get my code onto some repos (like the Joomla site), it needs to be GPL.
...and they are all GLP2. Thieves are gonna steal, no matter what, so my code out there is free for the taking. I use GPL, only because a couple of other FOSS repositories require it. I'd much rather use the "Take Me, You Gypsy Stallion" license, in which the code is 100% open and free for all. I don't like GPL, because it's a coercive license; every bit as shackled and enslaved as the code the FOSS folks like to dis. However, it doesn't hurt to use it, in my context.
If I don't want people to have my code, then I have a Perforce server that I run in my local network. I have a lot of stuff there, as well.
Then I guess you don't live in Seattle.
That is some of the worst traffic I've ever experienced, and I live in New York.
I'm really hoping that schools are starting to teach more relevant tech, these days. One of the reasons that I never went back to school, was I had zero interest in spending thousands of dollars, countless hours, and losing sleep, in order to learn technology that was already 5 years out of date (stone age, in tech years), and qualify for a job making half what I already made, and a lot less enjoyable, to boot.
What it really is all about, is classic ageism. Young folks:
Ah, well. Not that big a deal. I just find the dishonesty in this argument rather depressing. I guess "Honesty" is also one of those "Quaint and Irrelevant" attributes of old folks.
As a tech manager that employs some real, real sharp folks; some young, some older than I, I can say that silly, blanket statements like this are not much more than click-magnets.
THE TOASTER
Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. "What do you think this is?"
One advisor, an engineer, answered first. "It is a toaster," he said. The king asked, "How would you design an embedded computer for it?" The engineer replied, "Using a four-bit microcontroller, I would write a simple program that reads the darkness knob and quantizes its position to one of 16 shades of darkness, from snow white to coal black. The program would use that darkness level as the index to a 16-element table of initial timer values. Then it would turn on the heating elements and start the timer with the initial value selected from the table. At the end of the time delay, it would turn off the heat and pop up the toast. Come back next week, and I'll show you a working prototype."
The second advisor, a computer scientist, immediately recognized the danger of such short-sighted thinking. He said, "Toasters don't just turn bread into toast, they are also used to warm frozen waffles. What you see before you is really a breakfast food cooker. As the subjects of your kingdom become more sophisticated, they will demand more capabilities. They will need a breakfast food cooker that can also cook sausage, fry bacon, and make scrambled eggs. A toaster that only makes toast will soon be obsolete. If we don't look to the future, we will have to completely redesign the toaster in just a few years."
"With this in mind, we can formulate a more intelligent solution to the problem. First, create a class of breakfast foods. Specialize this class into subclasses: grains, pork, and poultry. The specialization process should be repeated with grains divided into toast, muffins, pancakes, and waffles; pork divided into sausage, links, and bacon; and poultry divided into scrambled eggs, hard-boiled eggs, poached eggs, fried eggs, and various omelet classes."
"The ham and cheese omelet class is worth special attention because it must inherit characteristics from the pork, dairy, and poultry classes. Thus, we see that the problem cannot be properly solved without multiple inheritance. At run time, the program must create the proper object and send a message to the object that says, 'Cook yourself.' The semantics of this message depend, of course, on the kind of object, so they have a different meaning to a piece of toast than to scrambled eggs."
"Reviewing the process so far, we see that the analysis phase has revealed that the primary requirement is to cook any kind of breakfast food. In the design phase, we have discovered some derived requirements. Specifically, we need an object-oriented language with multiple inheritance. Of course, users don't want the eggs to get cold while the bacon is frying, so concurrent processing is required, too."
"We must not forget the user interface. The lever that lowers the food lacks versatility, and the darkness knob is confusing. Users won't buy the product unless it has a user-friendly, graphical interface. When the breakfast cooker is plugged in, users should see a cowboy boot on the screen. Users click on it, and the message 'Booting UNIX v. 8.3' appears on the screen. (UNIX 8.3 should be out by the time the product gets to the market.) Users can pull down a menu and click on the foods they want to cook."
"Having made the wise decision of specifying the software first in the design phase, all that remains is to pick an adequate hardware platform for the implementation phase. An Intel 80386 with 8MB of memory, a 30MB hard disk, and a VGA monitor should be sufficient. If you select a multitasking, object oriented language that supports multiple inheritance and has a built-in GUI, writing the program will be a snap. (Imagine the difficulty we would have had if we had foolishly allowed a hardware-first design strategy to lock us into a four-bit microcontroller!)."
The king had the computer scientist thrown in the moat, and they all lived happily ever after.
My voting district is small. No issues at all. They have a new system, where you fill in scan cards (up until just a few years ago, they used the wonderful 1950s-"Crank Machines").
None of my team are brogrammers. However, it seems that many of the most popular companies to work for employ these übermen.
Thanks.
However, I think that it's very important for me to be an active programmer, current with the latest tech and, most importantly, process. My work at home, on my own coding, pays dividends at work.
I'm not one these "BOFH Bosses," who doesn't know what's going on. My folks can discuss pretty much any aspect of their coding with me, and I can completely understand it.
I'm 50, and with 30 years' experience, growing up with the Software industry, I do fine.
I learn better today, than I did at 25.
Back then, I just knew how to do stuff.
Now, I also know WHY it works. Right down to the bone.
My years of experience and nonstop training (self-training, when my company didn't want to foot the bill) has paid off in a big way.
However, I have absolutely no illusions at all that I'd have much of a chance in the job market.
In the day of the "brogrammer," there's no room for gray hair. I'd have to start my own company (something that I'm quite prepared to do).
I get paid to manage younger programmers. I code for fun.
Sounds like a government (GS-Level) job.
You'll get your 3% each year, regardless of how badly you screw the pooch.
Actually, I never said their format is bad; just that mine is better; in many ways, mostly for my own purposes. It has virtually nothing to do with K&R indenting, which was actually invented in the early days of C, when file size was a much bigger issue than it is now.
You see, I write plugins for all three of the "big" CMSes (Drupal, WordPress, and Joomla).
I use a common base class, and about 90% of the code is completely cross-coded. It's a sort of "M-V/C" pattern, with the C and V being mixed up a lot. It's an outstanding way to generate extremely robust and high-quality UX across systems. I've been doing it for a long time, and in many different languages.
I won't rewrite all the code used in the other plugins, just to please one set of folks. They have every right to enforce a common style, and I have every right to release mine on GitHub. The Drupal folks are geekier than most, so fetching the plugin from elsewhere isn't a big deal. It would be more of a big deal for the WordPress crowd or the Joomla crowd.
As I said, it really is all about personal style. However, in all my years of coding, one thing that I have learned, is that geeks LOVE to say "you were wrong", so I'm glad I was able to provide that service for you.
Cheers!
I'm an aspie, and I can work with dozens of styles.
/>
However, I do have to fight urges to reformat the code...
I prefer Whitesmiths indenting. In over 30 years of coding, I've never gotten used to K&R indenting.
I have gotten used to long, descriptive method, class and data member names, although I don't believe that a lot of "self documenting" code actually is.
It is important to have consistency; not just for others, but also for ourselves. Come back to your code in six months, and try and make heads or tails of it.
Drupal won't let me add my plugins to their repository because it doesn't use the same coding conventions they prescribe, even though my style basically far exceeds theirs.
<shrug
Their loss (but they won't roll up the project from it)
I was just giving this matter some thought last night. I learn faster today, than I did at 20. I suspect that's because my experience gives me a much higher baseline to start learning. I can learn a new language in a couple of weeks (for example, XSLT, which is a bit of a mind-bender for most procedural programmers). That's the easy part. The difficult part is learning and mastering the APIs and function libraries. That can take years, and a lot of hands-on experience; especially as most of them are moving targets. iOS is certainly like that (my current learning experience). I manage a C++ shop. I did C++ for a couple of decades. I don't do C++ any more. I don't get paid to code. I get paid to make sure that others code, and make sure nothing gets in their way.
And take the heat if they don't code. Management has its own ups and downs.
However, I absolutely love to code, so I do it as a hobby.
My current passion is writing client/server systems between PHP (server), and JS/JSON or iOS (client). That keeps me plenty busy, and gives me lots to learn.
I'm also learning about usability and UX. The iOS work gives me a great outlet for that.