11/21/2015 § Leave a comment
After a few years (10 to be more precise, wherein I was aware that a development methodology was in place in my shop, before it was always “get it done” and “all hands on deck”) of experiencing several software development cycle models and reading this slashdot entry regarding scrum I have a few thoughts on the subject and its high time I published them. First, let me say that my time spent in software development has been in the trenches, not at a managerial level, if that makes any difference. Still, I’m well aware of budgets, schedules, marketing requirements, all that. But the lingua franca of those subjects was never clearly spelled out to me, I simply absorbed them, as most of us probably do as we traverse the maze of the software business. And it is a maze, standing from my vantage point.
So when I tenured into this business the model had usually been “Customer wants *this*. They may or may not not realize they want *this*, but ultimately they want this. Take spreadsheets and the saga of Lotus 1-2-3. I clearly (like a bell) recall a business manager friend of mine for PG&E (That’s Pacific Gas and Electric for you who are not part of the American West Coast fauna) talking about software in the 80’s or so saying, during the introduction of IBM’s killer app for the 8086 PC; “Software is great, but when we’re cost analysing a proposal, we want to see those figures spread out.” and he went on to describe how the business preferred to have sheets of graph paper spread out on long tables, and if figures changed accountants with pencils would run up and down those tables changing figures as they changed in other parts of the sheets and so on. I have no idea how long he lasted with PG&E but I can’t imagine long because I can’t see people putting up with that nonsense when Lotus 1-2-3 made that mode of spreadsheet processing completely and utterly obsolete.
Every software developer since has been trying to create the next killer app. And with that have come people legion trying to create killer anything else; especially business logic.
“We’ll create the next killer business logic…” I can only imagine. So how’s that working out for you.
The next killer app for business logic had been “Agile” development, and the main (arguably) tool in Agile’s arsenal is scrum.
Agile software development is a “methodology” whereby people rush around complaining about schedules and pushing procedures. Not much different from any other “methodology.” At least in my experience wherein scrum was a thing, that’s what I’ve seen. And unlike many things in my life, I can definitely say this has been my exact experience with scrum, to greater or lesser degrees. I’m not even joking a little.
Which isn’t surprising, adopting a discipline is like adopting a puppy; sure sounds like fun, but then you have to take care of it. Then the reality sets in.
We have to do what?”
Software development disciplines are just that, disciplines, and they have to be followed, nurtured, improved on, and fed. And unlike waterfall, which requires and overseer, sure, scrum requires a “scrum master”, and a development manager is usually not a good candidate for that position. Scrum mastering requires a hands-on overseer, and with schedules and deadlines and enhancement requests and liaison (to development and business development ) management I frankly don’t see manager’s doing this; hence the invention of the “scrum master”, which is usually a developer being taken away from development time to “scrum master”. This is not from the Agile Bible, but from past experience.
In very recent experience, I’ve taken note of scrum and how it effects the development cycle. My overarching criteria in evaluating any process (or anything in that matter, in order, looks like this:
- Is it simple?
- Does it add value
- Does it add structure to the process?
- Are its iterations faster, or smaller in scope?
- How easy is it to implement?
- Did everyone involved find it less intrusive than the system in place before?
This is really just an off-the-cuff list but I think the points are relevant, even if others might position them differently. However, given these points as a frame of reference, I’m not so sure scrum adds value.
If a system requires a “master”, the implication is that the system on its face is already so complicated that a traffic cop is required for it to function at all. An engineer dedicated to the proper functioning of a development system already requires some time to learn the system and when to step in when a red light condition occurs, by definition. This requires some investment in study of the methodologies, depending on how much of the process you want to implement.
I knew we were in trouble in my last experience when I arrived for work on morning and my manager had the Scrum Master’s Bible sitting on his desk. Before long I (as sole software developer for the product) was charged with architecture as well as prototyping and production and required to fit it within the strictures of this agile system.
I can tell you the effort was a complete failure. I did things my own way and that manager went on to bizdev. It simply didn’t work. I’ve read opinions on the agile cycle being more effective in smaller dev teams. Well I’m here to tell you it certainly isn’t appropriate for teams of one, especially when that that team is making architectural decisions. So what, teams of 3? 5? What is the proper size of a scrum team?
I’m a firm believer of the “tool for the job” paradigm. You don’t need a hammer for all jobs, sometimes a tab is best.
10/15/2015 § Leave a comment
A dark space reveals a figure chained to a galley bench. The figure is of a man dressed in rags, he has been shaved bald, and beaten. Only the noises of the creaking ship and from above of the other men rowing in time to the galley driver are heard.
Alone and in chains it was difficult for the man to see his next move. Chess masters think in terms of moves ahead. Sometimes, however, an opportunity presents itself…
Suddenly in a flash of lights and a bellow of temple trumpets a vision appeared before the man.
The Buddha of the Western Paradise appeared before the man flanked by peacocks and 4 dakinis, and seated on a lotus throne.
“SILENCE!” roared through out the bowels of the galley uttered by no one in particular. The man’s eyes bulged out witnessing this spectacle, his body strained against his chains.
The dakinis covered their mouths in laughter, their bare breasts jiggling in their mirth.
The Buddha peered down at the man. “Its ok, they know you’ve taken a vow.”
He then extended a finger and used it to lift the man’s chin.
“Yasuda chan, I’ve seen you in better straits.”
The Buddha then became stern, peered further into the man’s face, and whispered:
“Hamaguchi Yasuda, the bakufu shogunate is corrupt, and it is time for a change. The world is changing, but Japan has not. For the sake of Japan, for its people, I am going to change her karma. I am going to change your karma. You were a master swordsman, I hope for your sake you still are. Very soon, you will be released. You will immediately and without reserve take the sword up yet again and be my tool for that change.”
That’s it for now. More later.
10/15/2015 § Leave a comment
It is 19th century Japan. Two samurai are sitting and smoking.
“No one knows where he came from. He was caught stealing millet from a street vendor in Yokosuka, and rather than cut off a hand a galley captain convinced the local authorities to just let him serve as a slave. Strong fellow, it took 6 Dōshin with bokkun to bring him down. And he remained absolutely silent during questioning. He fainted from the pain rather than say anything.”
“Mysterious fellow… what became of him?”
“No one knows, no one even knew his name…”
“So what name did he go by?”
The smoke from their pipes wafts up over their heads to reveal an ethereal scene…
10/15/2015 § Leave a comment
Ok, so this is a first draft, so go easy.
When the United States sends a naval delegation, led by Commodore Matthew Perry, to “open” Japanese ports in 1853, the Japanese are well aware of the “Unequal Treaties” that have been imposed upon China in the previous ten years (since the Opium War of 1839-42) as a result of the superior military power of the Western nations. The Japanese respond to the challenge of the West.
Reform-minded samurai, reflecting the enormous changes that have taken place in the preceding Tokugawa period, effect political change. They launch the reform movement under the guise of restoring the emperor to power, thereby eliminating the power of the shogun, or military ruler, of the Tokugawa period. The emperor’s reign name is Meiji; hence the title, “Meiji Restoration” of 1868.
The Japanese carry out this modernization by very deliberate study, borrowing, and adaptation of Western political, military, technological, economic, and social forms — repeating a pattern of deliberate borrowing and adaptation seen previously in the classical period when Japan studied Chinese civilization (particularly in the 7th century to 8th century).
Economic, political, and social changes that have taken place during the preceding 250 years of peace under the Tokugawa shogunate (1600-1868) lay the basis for the rapid transformation of Japan into a modern industrial power, with a constitution, a parliament, a national, compulsory education system, a modern army and navy, roads, trains, and telegraph — in less than 50 years.
The emperor’s effective power remains the same, but the reformers use the imperial symbol to rally public support and national sentiment for rapid modernization. In China, where a foreign power, the Manchus, holds imperial power from 1644-1911 (Qing dynasty), the similar use of imperial legitimacy — to mobilize popular support for social and political transformation to meet the challenge of the West — is not possible.
Japan’s successful transformation into a modern, military power is demonstrated first in 1894-95 and then in 1905-6. Japan defeats China, long the preeminent power in East Asia, in the Sino-Japanese War of 1894-5 over influence in the Korean peninsula. Japan defeats Russia, a major Western power, in the Russo-Japanese War of 1905-06 over rights in Manchuria and Korea. Chinese reformers and revolutionaries base themselves in Japan; Western nations take note of Japan’s new power.
Japan, which had isolated itself from international politics in the Tokugawa period (1600-1868), enters an international system of the late 1800s where imperialism dominates. Japan rapidly becomes a major participant in this international system and seeks particular imperialist privileges with its East Asian neighbors, China and Korea.
By 1910, Japan annexes Korea as a colony and takes control over indigenous Korean modernization efforts. In 1931, Japan takes control of Manchuria and establishes the puppet state of “Manchukuo”; in 1937, Japan invades the rest of China.
Japan’s democratic political system continues to evolve under the Meiji constitution, but then is unable to meet the dual challenges of economic depression and the political power of the Japanese military leaders in the 1920s and 1930s.
Our story begins in 1850.
10/14/2015 § 1 Comment
I love samurai movies, the films of Akira Kurosawa are the best. Who can forget Toshiro Mifune‘s look of utter disgust upon the cowardly villagers after the first battle with the ronin in “The Seven Samurai”?
Besides Kurosawa’s classic filmography there have been hundreds of films produced by both Japanese and Western producers in the genre.
I’ve even managed to collect a few real katanas from Japanese (and Chinese) sword smiths, not the plastic kind you find in Japanese gift shops. The real ones range in price from a few hundred to 10’s of thousands of dollars. Mine are modest, but they are true folded and cold forged blades.
As a software engineer with all my attention concentrated on my work its difficult to express myself creatively. I’ve attempted to do it musically, especially with the guitar, but I’ve never been able to snap into that mode that says “I’m not expert, but I can express myself to my satisfaction.” Even after years of on and off practice I really can’t play. And I’ve tried really hard, but can’t quite seem to get to a level I’m satisfied with. The same goes for drawing, painting, song writing, and on and on. The only way I seem to be able to satisfy my thirst to create is by writing.
Finding myself with time on my hands, as I sometimes do, I turn to creative endeavours. My very latest attempt has been to write a samurai epic in the manner of Zatoichi, the blind master swordsman portrayed so brilliantly by Shintaro Katsu. Another style of tale-telling that is similar in vein to Zatoichi is the Lone Wolf and Cub manga series by Kazuo Koike. The manga was issued in 1970 and spawned a handful of films and a television series and was considered very influential in the genre.
In my next post I will “publish” the first chapter of my story, working title of “Silent Sword”, here on my blog, as I have no hope of ever getting it published by regular means. If there’s interest, I’ll post more. I won’t send out a tweet hailing the event, I figure this one will be enough. I already lost one follower by simply tweeting out about my last post about RoR and Rust. Constructive criticism always welcome.
10/13/2015 § Leave a comment
Mention the C programming language and the younger guns head for the hill and look around like they need a life preserver because the office is sinking. This effect flies in the face of the fact that most of the Web 2.0 (and newer) languages resemble C in all but the most trivial of ways.
C is easy to grasp, in my opinion, and simply makes sense. Its no great mystery to understand why new languages take their structure and syntax from it. If you want a language that completely departs from C then you have to go back to older languages like LISP and Ada. Ruby and its web application framework Rails are the few examples that are a complete departure from the C syntax paradigm. D is a great attempt at complete type safety with speed but you’ll starve as a D programmer.
I have a friend I’ve known since college who loves Forth, and he claims he uses it in his current position. He’s doing fine but I kind of imagine him locked in a basement typing in Forth code and giggling to himself.
Pascal was great, that was the first language I learned that I could do anything with, and in the days of 300 baud modems war diallers were a thing. I wrote a dandy one using whatever pascal compiler was in vogue at the time (we’re going back 30 years, I want to say it was a Borland product but I can’t remember).
Then there’s Python. Python is a truly interesting “new” (its at least 10 years old) tool. If you like Python but miss RoR’s ability to create a working website and nearly automatic connectivity to a data base with only a few commands give Web2py a try. Its based on Aaron Swartz’s web.py. Aaron Swartz‘s sad story is another tale of injustice for another time.
I once did work for a bar tap company converting a RoR embedded application to C. Yes, it was a complete RoR application that had to fit in less than 800K of memory. The application worked, but it was a complete disaster. Its VM barely fit in in the space given, and was constantly having problems trying to work in that confined space. Clearly, RoR is not applicable to every scenario,
Python has its issue as well. Using white space delimiters is a bit of a problem if you like your code to look a certain way. I worked on a python project with one dev who insisted on using Emacs as his IDE. I sort of admire that, having used it early on myself. Its a sort of swiss army knife of an editor, you can use it as an email client, a firewall control panel, a word processor, and a C IDE, just about any kind of desk top client for almost any systems process, especially if that process will read a socket. However, in this particular case the Python programmer would check out other dev’s code from source control, edit it, and the check it back in re-formatted by Emacs to something it liked better, occasionally breaking the code. A serious problem. But that said, I think Python one of the best attempts at write once run anywhere around.
While WORA is good, except in somewhat trivial cases, it doesn’t seem to be something that is truly workable. Sure, its in effect, python does indeed deliver WORA, Java, others, do achieve it with a fair degree of reliability. But customization and addressing hardware is pretty difficult to deliver in a neat package, and that’s 90 percent of the work, at least in the systems work that I do. In just about every case I’ve had to re-compile servlets for a Tomcat app, or re-work a python tool to for a particular scenario. Why not just cut to the chase and write the thing in C? You get performance and a tiny foot print in the bargain. Is C so scary that no one wants to do it for web apps? It would seem so. Any reason to avoid pointers and memory allocation seems the be the reasons. devs appear to want to avoid touching the bare metal if at all possible. Memory leaks are often cited as another reason, “…you have to constantly trace down memory leaks if use C. Run valgrind on tomcat some time and tell me about memory leaks.
So what’s the upshot? I dunno. I’ve noticed the number of ads asking for RoR engineers not quite as numerous as they were a couple of years ago. Languages seem very faddish. I’m really happy doing C/C++ programming. I hope I can keep doing it for some time to come. So far so good.
So writing Ruby GEM extensions with Rust is an interesting thing however. I was introduced to rust by a colleague who wanted to use rust gems to add extensions to read usb censors. I naturally thought we should just whip out a C GEM to do it, as did several others, but this guy was insistent. So I took a closer look at Rust. It does indeed have some nice features as these new languages tend to do. I was again impressed by its speed ranking in comparison to other languages. I typed in a little hello world program along and it was in my opinion even easier than a python program. It compiles down to a typical-looking Linux app as well; you can run it by simply pre-pending a dot-slash to the name of the file in its directory. Really pretty nifty. But here’s the bad part; the compiled program ballooned from 46 bytes to 570,075. Holy crap. A minimal application requires over half a meg of support code. I was hoping to see if writing the GEMs for that bar tap application in rust might have made a difference, I see that writing them in C as I did was the right way to go.
Ok, well, what was I expecting.
I don’t do a lot a RoR work, in fact none, I’m not exactly a fan, and I doubt I’ll be doing much in the future. But language unions have always been an interest of mine, its nice to explore.