How a sysadmin can become a programmer
cuddletech.com
cuddletech.com
"Step 3: Scripting isn’t programming."
I have to disagree that scripting isn't programming. To me it is no less programming than using a library, except for you are interacting with that library through stdin and stdout instead of a direct function call. If there are no libraries available for a single user tool, then execing is your only option. UNIX is designed to pipeline many different small tools that do one thing very well together. What's the difference between doing that at the command line vs doing it in a script? Sometimes it's just the most efficient way to program something. And with the use of exec tools can get quite powerful quite fast.
Testing. Clean consistent APIs. Dependency bloat.
Scripting is not programming in same way clicking through install wizard is not system administration.
A sysadmin and a developer walk into a bar. They decide each to make a website doing order management and return in a month to demonstrate both solutions.
First the developer gets his turn. There's a massive version history, which is shown. After 15 minutes of browsing through commit messages and pointing out test cases and "look how easy it is", everyone in the cafe requests to be shown the actual site. After pointing out there's more LoC dedicated to unit testing the code than there is actual code, the programmer gives in and opens a web browser. "Could not connect to site". The programmer forgot to start his solution's web server. He logs into a shell, gives the command. After 3 tries he gets the command right, and it won't start. It is quickly noticed that there is a bug on the top of the main function preventing it from starting. He quickly fixes it. The website has every feature you could possibly want and more than a few you wouldn't want, and looks beautiful, if a bit "full". And every individual feature works beautifully and perfectly as designed, and then 2 or 3 features have to work together and an hourglass appears. After 5 minutes they give up the wait, and the programmer digs into the code and concludes that it was completely unreasonable for the sysadmin to ask for a demonstration of picking a product and while a mail notification service was enabled, something which was never in the requirements ! Getting a report out of the system takes the better part of the day. Before the demo can go further the web server crashes and not only did the programmer lose the entire order database, but the versioning system, including all the code, and surprisingly the crash also managed to take out the entire contents of the programmer's gmail inbox, X-COM savegames and his drink is suddenly empty. Only the drink's disappearance can reasonably be blamed on the sysadmin.
Second, the devops/sysadmin turn comes round. His website has been running for a long time, in fact he says he didn't bother restarting it to add the last 10 features he added to the site. The programmer (and everyone who isn't the sysadmin) has serious trouble distinguishing the website from a terminal window, or indeed, from an unpowered laptop. Tiny gray letters on a black background list the orders, as confirmed by an inspection of the sysadmins laptop screen with a magnifier glass and extreme brightness settings. They are preceeded with 10 letters that can be either small caps, or capitals illustrating the various properties an order might have. Oh and it can also be one of 2378 other letters that indicate various things, but even the sysadmin himself has forgotten most of them. There is one test, which starts up the system, and runs 1000 orders through them. The "RoundFloat" function in the code turns out to return a string, "dog", but is never called. There is no reporting functionality, insists the programmer. The sysadmin disagrees. Look ! echo 'cat orders//??d.2013..xyzz2??3?? | sed "&()&^#@\&^\\@#" | grep | perl -pe "lqwtq8(&()lj;lkd" | mail jef@boem.com' >> /etc/cron.daily adds daily reporting of all orders in the asian region over $220 to the system ! The sysadmin insists that this is simple, as he got it right the first time. When a person standing at the bar is asked to enter an order into the system, he tries for 10 minutes, then knifes the sysadmin in frustration, before retreating to an optician for damage control. The "web server", which turns out to be a bash script, has never spent more than .0003 picoseconds serving the page. The page ? Yes, there is only one after all. Why would an order tracking system need more than one page ? It turns out the webpage page is text/raw, not text/html, after which a baffled sysadmin enquires what's wrong with that. An inspection of the versioning system reveals 3 commit messages "start", "middle" and "end", and nothing else. It's replicated to 5 different datacenters, though. Look ! An offsite backup was initiated as soon as an order was entered. The programmer, still angry about his crashed server, takes an axe to the sysadmin's laptop, which surprisingly remains operational after being hacked in 10 pieces, set on fire, and fed to a local dog. The sysadmin declares that he's very proud of the system's features, you know, both of them.
The whole thing ends in a barfight between the two, the sysadmin insisting that a non-working website has 0 features, even if the programmer implemented 3000 "well-tested" ones, chuckling at the "tested" word. The programmer was heard saying that a single black screen does not an order system make, before breaking a beer bottle and attacking, with help of the person that was asked to enter an order into "the black hole".
To me programming is writing a program.
There are lots of examples of both kinds of scripts. But in my experience bending bash to what you want to do and making everything a quick solution for immediate issue is a bad idea. At the same time I see it in many places where pure sysadmin skills were applied.
The reason I stopped coding is that I got into it to solve problems, but I got tired of spending what felt like 90% of my time writing unit tests, wrestling with frameworks, and solving problems with upgrades to the huge webs of dependencies for even basic projects. In other words, I got fed up with what coding has become. It's no longer hacking. It's toolchain management.
I'd always been a full stack developer, so I just started focusing more on the sysadmin side and gradually transitioned over there. I can manage toolchains just fine if I want to focus on that. My coding experience is handy when we're trying to troubleshoot a bug that only shows up on production ... uncommon, because our dev and QA groups are GREAT, but it still happens. I not only know where all the logs are, but I'm able to read the code and make sense of stack traces from the different languages we use.
Those who think what I've done is ridiculous don't understand how scripted everything that happens in the sysadmin world these days. Everything in infrastructure/operations is scripted except the troubleshooting -- and even that stuff gets scripted as soon as it's done so that it doesn't pop up again. Yes, the native language of these tasks is bash, but ruby and python are becoming really popular. So's haskell, for those who can speak it. What's disappointing me right now is that all of the chef stuff we're doing is starting to get complicated enough to have a big toolchain (thankfully managed right now with bundler) and starting to grow unit tests... Didn't I make a career change to get away from this crap?
I think I'll go be a DBA next. ;)
I know a fair number of developers who find ops pretty crazy, considering that a good chunk of it can be automated. So I suppose the other side of tedium is the unnecessary risk in having to hand-perform things repeatedly.
What do you think about Anderseen's "Software Eating the World?" Wouldn't it make sense that at some point in the future, "running a smooth environment" gets eaten by software too?
I'd add to that, dealing with programmers who insist all of this is absolutely necessary, as if software didn't exist before these advancements. Meanwhile, it takes them a couple days to program themselves out of a wet paper bag.
The article didn't claim that scripting languages don't count as programming. Despite the heading "scripting isn't programming", it doesn't even really claim that scripting isn't programming: it claims that if you switch from shell scripting language to a compiled language, but you still do most of the stuff by spawning child processes, you're most likely using the wrong tool for the job.
Speaking of conceit, the article didn't actually say or even imply this. You're projecting. It mentioned a line 'most' sysadmins use, then talked about some strategies you can pursue if you want to 'become a programmer'.
For someone that likes to solve problems, 95% of software development is mind-boggingly boring. It's mostly looking at the same codebase day-in and day-out, while having to deal with shifting requirements. All of this to end up with some application that you mostly wouldn't use yourself. This, if you're lucky that your project doesn't get cancelled before it sees the light of day, or it doesn't get delayed so much that you get so bored that you move on before seeing it to completion.
And the consultancy... Parachuting into projects at clients and being extracted by helicopter when "it's done" (which is usually when it meets minimum requirements to receive payment, not when it is at all in a state to be proud of).
Really, 95% of software development isn't glamorous stuff at NASA or the next big social network(1).
Systems administration, provided you are self-motivated, can actually code your way out of a hole, and are willing to deal with the occasional user, provides plenty of space to solve problems with programming. With programming, not IDE and framework juggling.
Sure, it can be boring at times and can be stressful at others, and you have 95% chance of being in the exact same environment where you wouldn't like to be coding in. But at least you have more autonomy and can actually solve problems.
I'm a programmer by training and a systems administrator by profession. I would most likely rather be programming than taking care of systems and databases, but only if I found something in those remaining 5% that I would actually enjoy doing.
Otherwise, it would just burn me out from programming altogether, and I like programming...
(1) Actually, developing the next big social network is probably as boring as everything else I said. Who in hell wants another social network?
No matter how perfectly you do or don't architect something, it will have a failing point, just like the limits of hardware when you buy them. There are some very general thinks you can do to be kind to your future self architecturally, but just as many you can do to hurt yourself.
I think edw519 said it best, clever architecture can be far more important than clever code.
The nature of systems administration work falls into two broad categories. The first is small problem work: a user has a problem, a machine signals an alert, something isn't working. The second is, of course, large project work: users need a new service, the alerting system needs to be replaced, new infrastructure needs to be built. Most of the time, but not always, the small problems need and have immediate solutions, and the large projects are not as time-critical and require some amount of research, budgeting, selection, configuration and support before they can be deemed complete.
A sysadmin who has specialized into a particular problem domain will need the skills appropriate to that domain. Sometimes that means picking up a new configuration syntax -- which may be a complete language. Sometimes it means building better communications skills, so that you can diagnose what your users are complaining about. Whatever it is, you can assume that the people who specialize in an area that doesn't require much programming, don't do much.
Generalist sysadmins, on the other hand, need to be competent at a wide variety of skills, including two or three languages. That doesn't mean that they need to be UX designers (but they need to recognize a UI failure) and it doesn't mean that they need to be database administrators (but they need to understand how to back up and restore the databases they support, and figure out the replication system and find single points of failure). They do need to be able to write short programs to automate what they would otherwise do manually, to figure out what the debug logs are really complaining about, and to understand computer systems from electrical and environmental needs through virtualization systems and configuration management.
Finally, there are sysadmins who are also developers, who announce that they don't like any of the existing mail programs and so they will write a new one; who determine that there's no configuration management system that tracks and removes subsystems as cleanly as they would like, and so a new one will be needed; who write filesystems or music organizers or browser extensions because that's what they need and want and are good at.
The industry, nebulous quagmire that it is, needs specialists, generalists, and dev-ops hybrids. Making false generalizations merely reveals a bizarre lack of awareness.
I have also seen less sysadmin programming (whatever that is) at the larger companies, because they will purchase prepackaged products that fit their need.
They had about 9 sysadmins go through their doors, a maximum of 7 at any one time with a max of 4 coders. Of those system guys I'd hazard a guess that around 50% of them couldn't code at all and only really two could get anything beyond procedural scripting, if that.
Not to disrespect these guys because some of them were between good and really good at what they did do, but there were also decisions such as to rely on expensive SANs and proprietary software to tackle issues that could have been and later were replaced by internal code because, in my opinion, these guys were unable to comprehend automation on a scale that a developer could unless they already knew of software available to do such a thing.
After that I worked for a massive hosting company with much more segregation of departments and as far as I'm aware operations didn't code despite the deparment being a lot larger than the previous company.
It's funny because back then I was arguing with both these companies that operations should be driven from an automation stand point utilising devs skills but it wasn't exactly a great point since I was the only developer on staff for much of that time in the first company and the second wasn't interested at all.
For the record, I'd like to be a devops but I'm pretty sure I get shut down from those roles from a percieved lack of operations experience and buzzwords. Much of that because I'm actually honest and my experience of sysadmins are that they were gatekeepers unwilling to so much as let me login to some of their systems. Meh.
I'm sure theres a lot of sysadmins out there who a very capable software developers but I think it's a stretch attempting to call often simple configuration languages and extremely short glue scripts programming. But hey, as long as you're adding value, who cares what we're calling it.
I had to learn and maintain the network, equipment, software, and the code to all work together in one solution. They may call this full-stack developers now, but in my circle of friends I grew up around in technology, it was the only developers that could learn and work with the full stack that got the most done.
SysAdmins from the past years might not be able to code, but I can tell you this much: 7+ years ago, there was very little luxury of being a coder or sysadmin only if you were close to solving problems.
Sysadmins do program. Their programs tend to be flatter (scripts, not frameworks), but that doesn't mean they aren't programmers. They probably can't build great frameworks, but not a lot of programmers can (but sadly, they try - every big corporate project seems to grow into a badly thought out framework).
If you pick any domain that's not "compiler design", you can probably make a good case that they aren't really programmers.
Most software engineers couldn't do any of those tasks to the typical, silo-enforcing business asshole's liking (i.e. it needs to be done yesterday). That shouldn't matter. What matters is the ability to learn.
The very best sysadmins are also good coders, and the very best coders are also good sysadmins. The foremost experts on any operating system are the developers that work on them after all. You can never fully understand an operating system without reading the code, and you can't write the most efficient code if you don't fully understand the entire stack the application runs on, operating system included.
As for using tools instead of writing code, what it comes down to is what's the best solution for the problem at hand. A good sysadmin doesn't need to memorize ways to use tools; they know each of the tools well enough to make full use of them. If a task can be done with a one-liner, and has a fixed amount of work to be done, why would you spend more time to implement the same in a programming language, when the execution time is insignificant relative to the development time? Considering the slower higher level languages that are popular nowadays vs the standard tools written in low level C, the execution time may actually end up slower despite the execution savings in running a single process instead of many.
I can agree on the first, but the second while surely true in cases is maybe wrong for people doing something completely different, like are more into the academic areas, in really abstract levels, doing big data stuff in completely managed environment.
Think about planes. Someone who crafts and maintains them and is close to the metal, maybe is a really good pilot too, because he knows planes in and out, but while really good pilots probably know a lot about planes, they may be focusing on stuff that is really, really far away from crafting one. Still they could be among the most excellent pilots.
But then who is who, might depend on whom you ask.
I just really find it funny and that's something that kinda came across in the article, how because sysadmins are frequently good in a field of programming that by programmers is considered a field of masters, which are operating systems and all this low level stuff that many programmers have to get to at some point. In a way sysadmins have to do and shell scripts are pretty high level. But it also really shows how it is a lot of two different mindsets.
Just look at openbsd-dev mailing list. Most of those guys are sysadmins, like the guy who wrote OpenBGP from scratch, the pf maintainers... basically all Berkley forks were created by sysadmins.
Good sysadmins obviously exist, but in my experience they are a shrinking minority.
The phrase "I'm not a coder" can mean all kinds things coming from a sysadmin, context is import.
If a sysadmin truly lacks the ability/confidence to write useful code, I'd expect has more to do with the typical nature of the job and organizational divisions than prejudices, hang-ups or fickle behavior of the sysadmins themselves.
A role which is too often reactive doesn't leave much time for development. Likewise, development towards the goals of a sysadmin (automation, insight, reliability) too often lead sysadmins to unemployment due to misunderstanding as the relationships between sysadmins who "don't do anything" and systems that don't break.
I expect new businesses, particularly the type common on HN could be exceptions, but in many organizations the preferred language of system administration and those of software development don't align. As a result, serious sysadmin code written in say Python as opposed to corporate standard of .NET/Java is putting the sysadmin on an island and likely to be seen as a threat/liability.
"We don’t want to learn the latest IDE and develop best practices for working with a version control system with other developers. Code reviews, strategy meetings, QA reviews… what? No thanks, let the programmers get that stuff done. They have 7 hours to commit to this project today, I have 45 minutes and that’s only if all my KLO goes well."
Why do you feel this way? (Not a rhetorical question). Looking at it superficially, I would guess that:
(1) You don't like the engineering part of software development, finding it too tedious or something? (2) You feel like you're more badass for having to get shit done in a much smaller time frame.
I read through some of the other responses and it seems to fall into this general pattern.
>(1) You don't like the engineering part of software development, finding it too tedious or something?
I find the engineering of software fascinating. I've found the glacial pace and ceremony of most software development teams I've been exposed to unbearable.
I can't imagine this is intrinsic to software development, more likely a clash of cultures and eras.
For example, during my longest stint in a sysadmin role (~10 years) I supported and migrated between a continuously shifting mix of OS/2, Windows, AIX, Solaris, NetWare and all sorts of Linux speaking SNA, IPX, TCP/IP on EoC, TR etc.
I did this while accommodating and often clashing with internal developers who had been working the same codebase the entire time.
Again, I don't mean to present this as something necessarily true of all development vs administration as a whole, but I've seen it and heard similar experiences related enough to think that it's not uncommon.
>(2) You feel like you're more badass for having to get shit done in a much smaller time frame.
Well, "badass" seems a bit condescending.
When a sysadmin needs to get things done in 20 or 45 minutes, there's a good chance his job depends on it. Though they generally wouldn't choose to put in positions like that, I have found that people who excel in the role are the ones who can stay cool, thrive under intense pressure.
So what about, for example, video game development? It's infamous for development to be in continuous state of crunch time.
His stories corroborate what is often heard about gaming companies - that the continuous crunch time isn't necessary so much a matter of exploiting an endless supply of young, enthusiastic talent.
I'd certainly see myself having issues with that kind of environment.
The fast iterating development culture of many Internet-era companies certainly sound nice, but never having worked in one, I'm not sure how of the hype to believe.
I brought it up though as an example of pacing. I'm trying to discern whether it is the pacing itself, or whether it is the programming jobs you have tried have been with organizations that have a lot of red tape, or whether it is simply the engineering discipline that you prefer not to participate in.
As for the Internet-era companies, the fast iteration is something you tend to see more in startups rather than startups that have matured into big business. Iteration for the sake of iteration itself doesn't work very well either (John Boyd "fighter pilot agility" vs. Agile Manifesto). It's also where devops is coming out from, and proliferating back into mainstream IT.
Age 0, all computer users where actually users and sys admins and programmers and EEs, then, when computers stopped being room-sized monsters, in
Age 1, all users were users and sys admins and programmers (the Lisp machines era is probably at the end of this age), then, when software became actually usable by most non-programmers, in
Age 2, all users were users and sys admins (the UNIX era falls in this age), then, in
Age 3, users started to be only users - or, more exactly, people who were not programmers and sys admins started to actually use computers on a large scale (the current era of Windows and Macs and everything else) - since sys admins separated themselves from the users group long after the programmers have, they are "philogenetically" closer to users than to programmers ...also, this is why I think the "Linux desktop" dream took so long to rise up, becase Unix systems by design ask users to at least be sys admins too, and reward them to the max when they are sys admins and coders too.
Now, if anyone has any idea of what comes next, please share the enlightening thoughts :)
The only witty continuations I can think of is: Age N - humans are no longer "using" the machines and they haven't done this for a long long time (well, they do, but only in the sense that a plant uses the sun, water and earth to survive), they are being used by them, grown in "human natural reservations" for scientific study purposes and historical education purposes for machines to remember how the beings that preceded them were like ...but hopefully someone else has a brighter view on the future.
I don't know what's the state of the coders tools for smaller devices, but that's an idea PG would like to fund: http://ycombinator.com/rfs5.html
What I'd really love to have (and even I'd even pay good bucks for it!) would be a browser-based-polyglot-IDE, maybe an IDE implemented as a browser extension, that would simplify the fucked up workflow of web frontend dev (none of the existing editors, IDEs or anything else properly handles the ungodly tangle of HTML/CSS/SASS/LESS/Javascript/Typescript/Dart/CoffeeScript...) and be totally platform independent so I can use it on any device and just tweak some configs to adapt it for a particular small screen size.
I think "RFS 5: Development on Handhelds " has a wrong perspective, you don't want to think about development on handhelds, you need to have dev tools that are so platform independent and form factor independent that they work on anything (code-mirror seemed a nice base last time I checked, but compared to what's needed is like comparing the linux kernel with full fledged desktop linux distro...). And if you think about tools for developing native apps, I think this is "sailink a sinking ship" anyway and on top of that you could always be put out of business by Apple or Ms making an Xcode or VS version optimized for handhelds and giving away for free and "express" version that will be good enough for most.
Anyway, this has veered seriously off topic, but dev tools are something I care about and I couldn't refrain from commenting on that :)
That style of programming is very very different to regular compiled programs, and practicing one and never the other will lead to a bias, and relative incompetence in the other. This is why I'm rubbish at chaining unix commands together, because whenever I'm confronted by a problem that might need something that complex, I just use python. I have the reverse problem to the rhetorical sysadmin in the article.
On the other hand most of developers' knowledge is like swiss cheese, because they don't know enough about underlying machine, they only want to deal with abstractions and algorithms, so for example trivial things like where is located config can be really tricky for them. As you can see, one could do same article about developers, but what's the point on spitting on people you work with? Ah, yeah, frustration :-)
OK so I'm not a cool kid anymore. But I can be again, I just have to slog through some tomes and actually build something cool. Isn't that what being a nerd is all about?
The skill sets for a good programmer and a good sysadmin overlap somewhat. But you can make MUCH MORE MONEY writing software. In the early 2000's when I was a sysadmin jobs in my area were paying 40k-60k a year. Programming jobs were paying 60k-100k. So basically, poorly payed IT positions select out anyone who could actually do a good job at them because those very people can make more money writing software
I'm a programmer and I know how this feels. It's not about "cheating". To me, I view it as "I can't be bothered to learn /how/ this works, I'll just use a library". I can make a half-assed HTTP library, but in production, I'd obviously use a real library. The important thing is I understand on a more intimate level how HTTP works. That is invaluable in debugging as when I ask myself "why isn't this working", I can think back to my own code and it often helps to shape my understanding. I can think how the machine thinks as I taught it how.
I'll often study other systems while building my own. It's all part of the learning process to me.
It also provides deep appreciation for the effort that's poured into libraries.
I've also done the same thing on the web; I used XMLHttpRequest and DOM apis for years before I started using jQuery. I've never had a single complaint but I've seen programmers who have gone right into jQuery and surrounded themselves with abstraction and have had no idea how the system is behaving and they get confused and frustrated. This leads people like me to view libraries as bad; they are preventing people from learning how their systems work.
Programmers today seem so lazy. I'm not really sure if that's the right word. I see people using HTML 5 Boilerplate and they never seem to ask "Why is the meta charset before the title tag?". I did. Now I know about UTF-7 XSS vulnerabilities. I spent most of my day reading up on charset vulnerabilities. With that knowledge, I patched several projects of mine. Sure, people using Boilerplate would be protected but they wouldn't really know what from.
Perhaps I just think differently to other programmers. Maybe they just want to get on with their work while I obsess over "how does this work?!"
Throw in that programmers work on more monolithic projects, getting the libraries for those is (kind of) a one-time affair, but with sysadmins working on smaller, multitudinous projects, you can end up with a raft of different libraries to manage.
The real answer, as always, is 'be appropriate'. Often libraries are called for, but sometimes they're to be avoided. It depends on the use case, or even the library itself (we're currently using an abandoned one in production... and there's some crossing-fingers going on as we don't have the resources to fix it if there's breakage...)
I've meet coders who couldn't spell "DHCP" let alone tell you what it does or how it works.
They're two completely different job descriptions - why should one need to do the other?
Programmers that don't know basics about network are very often poor programmers as well. Most programmers must be able to set up build servers, test environments etc that they need. Of cause the sysadmin can do it for them, but in that case they have to wait until he have time, and even then they will get poorer understanding of the system. Also a lot of programmers need to know network basics because their application has a network component. It is also important for a programmer to understand what he need to make a system administration friendly, like easy to install and upgrade, sensible logs when things go wrong etc. They don't need to be able to take over the sysadmin's job the next day, but should understand what the job is about.
Sysadmins on the other hand need to at least be able to script common tasks and write plugins for monitoring software and be able do some customization of the systems. They don't need to be able to, or use the methods for developing large complex system, but I expect a good sysadmin to know programming and scripting in some form.
Other than that, I really wasn't a good sysadmin, actually I used to be a really bad sysadmin, but still came from that direction. This however brings me to another thing: Sysadmins aren't ever valued enough.
Everyone treats Sysadmins as second class IT people that can't code too well. However, that's from my point of view not true at all. They usually code "script" way faster. Their set of tools simply are different and designed for people trying to reach different goals.
But there is more to this. As a programmer, you have your cozy, nice environment, your nice specifications, your nice libraries, your basic knowledge of data structures, etc and you have an easy way to be like "uh you can do it that way. It's even cooler".
As a sysadmin you usually don't have anything to rely at all. You don't learn too much at universities, that can be of help and while as a software developer you basically have to just write code and make that work as a sysadmin you are dealing with unpredictable systems, have maybe a single system with multiple users, need to make sure none of these processes do something bad, yet can do everything they may need to do, need to trace down an error that is somewhere, don't have a debugger, can't just quickly run the code on your test system, have a way harder time to trace things down, but then it doesn't have to be the one system, but could be a whole network of such systems, the whole internet can be the source and you are pretty much always in the battle field, in live systems and lots of attackers could potentially attack every single thing and you basically need to know every protocol, and every piece of software, every network connection and by heart. It could be something very high level causing the problem, a faulty program, the hardware, physics, whatever and you have to try to master chaos every single day, while programmers usually just work with something simple and often see it as a super hard problem when they are dealing with some input from the outside.
I don't know, but it feels weird, when the bigger amount of math basically causes your pay to be higher, when that very thing is actually making your job easier.
I am a programmer myself. I love coding. I love my job and I kinda like to brag a bit with it, but actually compared to many other jobs, like sysadmins we are really overpayed, while way too often complain about bad sysadmins. Being a sysadmin isn't just "apt-get install apache", but way more and way intense.
Another thing that's also funny and strange is that scripting thing. The same thing that often causes sysadmin to start out with ugly code is the thing that makes sysadmin advance extremely quickly when it comes to code quality. Once they really are programmers they know that a lot of code can be complex and since they have skills in using many tools and not just use them, but use them correctly (unlike most programmers tend to) they will usually turn out to write high quality (less bug prone) code with the right amount of defensiveness and in a way that brings some kind of order into chaos.
It's a hard way, but sysadmins are maybe a bit too much perfectionists to realize that they would be good programmers and that hardly is recognized by people starting out as programmers, who would make really, really awful sysadmins btw. and no just because you set up a unix system and a firewall it doesn't make you a sysadmin.
I actually even think that the devop thing is going partly into a wrong direction. It works, but only if you are using Ubuntu. No, really. That's also not a good thing in general, because it could actually push IT backwards. Diversity is sadly not valued enough. Using the right tool can really push you forward. And while we often seek for tools used by most people it ultimately leads to stalling. Going into a direction where we have Ubuntu instead of many Linux distributions, many Unices, many Operating Systems isn't good. There are reasons for the creation of more than one and they didn't use to be as naive as they frequently are today.
Also Sysamdins are very humble. One can actually see that by version numbers. It's maybe a bit silly of an example, but they (and programmers working with them) are extremely conservative about making a version sound like it could be stable. If they try their hard to find anything to change or make better and really can't think of anything then they will maybe call it 0.9 Alpha. On the other hand, if they find something that is called 12.13.4.0 then the zero at the end makes them really suspicious about the software being too unstable (there is enough chaos already). If you know such software then it is probably written by a person somehow related to sysadmin stuff.
However, there is one thing that would make Sysadmins really great programmers: They are super pragmatic. They a´have a good sense of realism. They know what's necessary and what isn't, as long as they are not afraid of being punished for non-perfect/beautiful code. That means that they are good at writing release-ready (feature-/stability wise) code.
However none of that is true for anyone who just switched. It's just hard to learn what the right amount of quality really is and that it also is about "beautiful code".
Well, so much about my experience. If you know a sysadmin that likes to code, maybe help him and be nice. They are always complained about when something doesn't work (even when it isn't their fault) and whenever something works great it is the developers, marking people and so on who are praised.
"You can't X. You're a Y!" Well, fuck you.
All of this warring-camps idiocy, "hire a real X" nonsense, and all of these damn silos, just exist so a bunch of people who aren't smart enough to manage technology can feel like they understand shit. They don't. They hire some $785/hour consultant whose diagnosis is, "you need better system administration". So they go out and hire a sys-admin or two with a "track record" and the problem is "magically" solved.
Programming was supposed to be the magic skill that allowed one to move fluidly about the industrial/technological economy. It showed that you could grapple with abstraction, learn quickly on your own, and get hard things done and do them well. It conferred mobility and job security.
Then those useless "be a team player and syngerize the verticals while the rubber hits the road" monkey-morons came in and had to fucking siloize everything, just to play a divide-and-conquer game, create the sense that we were incapable of handling "the big picture", and reduce our bargaining power. This distracts us from the fact that those people aren't at all necessary.
Good business people go out and solve important business problems; the bad ones meddle in our affairs for intimidation's sake.
So true.
I worked in a largely silo-free environment up until about 2007. New management transformed an effective ~25 person team into half a dozen kingdoms of 30+ each in a little over one year.
I left and discovered just how unique my environment had been prior to the regime change. It's hard for me to imagine how any organization which has gone down this path can hope to reverse it.
It's desirable to both the managers who use it make themselves relevant and an unfortunate majority of workers who take comfort in their pigeon-holes.