Tuesday, June 30, 2015

The biggest problem with react.js – knowing what is fresh.

Currently coming up to speed with react.js

Coming up to speed involves reading vast numbers of comment threads, StackOverflow question threads, the official documentation and blog posts from any number of authors.

react.js and its ecosystem are rapidly evolving.  Thinking changes, API's change, related projects change, approaches to solving problems change, build systems changes, everything changes extremely rapidly.  For goodness sake the JavaScript language changes.

The rapid pace of change is a good thing because the outcomes of change are usually better functionality or greater simplification.  

So you want to be working to the latest version of everything if you like to write simpler and more functional code.

BUT there is a HUGE problem. How the heck to know if what you are reading is outdated thinking or latest thinking? There is no way to know how near or far a given blog post or problem thread is from the cutting edge.

It's a huge problem because doing something "the old way" can send you down the wrong path for hours or days or worse. You almost always want to be doing things "the new way".

Any given page that you read might give you that answer to your current question or problem. But there's no easy way to know if a better way hasn't already been worked out by someone else.  It's a real problem.  I have no idea how to solve that problem. Do you?

Friday, June 26, 2015

The downside of being a full stack developer - lost productivity.

Full stack! Full stack! Full stack! Full stack! Full stack! Full stack! 

Employers love the idea that a developer knows everything.  It's almost an expectation.  

I've committed myself to being able to develop every aspect of my software which means I need something between effective practical to deep expertise in Python, JavaScript, react.js, HTML, CSS and a whole bunch of sub-technologies like SQL and the various libraries used to get any useful work done in any of these languages.  Oh yes also I need extremely deep knowledge of Linux and Amazon Web Services.

The price however is devastating in terms of time and productivity because these days getting anything done in any language requires not just that you know the language but that you know the entire ecosystem of tools.  Want to write a browser front end in reactjs?  Well you're going to need to have come to grips with npm, gulp, babel, browserify, react-router and ES2015. Want to write a Python back end?  Well you'd better have come to grips with virtual envs, uWSGI, some sort of web server like Flask or Falcon or Bottle or something as well as learned how to drive SQLAlchemy.  Want to deploy your system?  You'll need to know so many subtechnologies of Linux that's it hard to know where to start naming them.

I need to know so much stuff that by the time I have finished learning a new ecosystem I am worried that the one I was using two months ago has fallen out of my head and needs to be re-learned.

The upside of all this is great - I can build something without anyone's help.

The downside is the devastating cost of trying to grasp the mental model of every one of these development ecosystems and make them work, all the while fighting the tidal wave of errors and broken things that experts have become so good at navigating that they no longer notice any more.

I spend hours and hours and days trying to make things work and trying to fight my way to being able to write productive code instead of just making the damn technology work in the first place.

Presumably non-Full Stack developers are incredibly productive because they know their tools and technologies and can get on with the job of writing productive code, instead of spending all their time learning the latest wind of change to blow through the JavaScript world.  I envy them.

I seriously wonder if other full stack developers find the whole thing super-easy and breeze through it all learning everything in a flash and making everything work the first time.  Holy hoot I hope I'm not the only one who finds it hard to put all the pieces together.

Monday, June 22, 2015

Windows 10, the cluelessness continues.

In my previous post I griped about how Microsoft throws responsibility to you to work out how the heck to get their ISO onto a bootable USB stick - good luck with that one grandma.

The Windows 10 bootable USB stick that I tried to make on my Mac didn't work and I didn't figure out why in the end.  I eventually managed to get a bootable USB stick made thanks to extensive Google searching and thanks to a utility call "Rufus" which I ran from an old Windows 7 machine that I resurrected for the task.  Microsoft should just buy that company with its pocket fluff and stick the utility right there on the Windows 10 download page.  

So I booted up my laptop and was pleased to see the Windows logo as the installer loaded from USB. All went fine until I tried to get past the formatting of the hard disk.  It didn't work.  Windows gave me some vague and unhelpful error.  OK, so is this a problem with Windows 10 or is there something wrong with the new hard disk that I just installed into this machine? To find out I downloaded the latest Ubuntu Desktop installer and put it on a USB stick.  Ubuntu Desktop booted up and installed cleanly and had no problem with the hard disk. 

As an aside, I have to say at this point that I was a little taken aback. I have never had a good experience installing desktop Linux.  I've given it a go every 12 months or so for a few years and it ALWAYS feels clunky and unix-ish.  Usually, any flavor of desktop Linux throws reams of complex, frightening and technical sounding text messages at you, switches jarringly out of graphics mode into text mode and back again, fails to recognise your wireless network card, forces you through the most arcane possible hard disk formatting process.  None of that happened this time. Ubuntu Desktop installed easy, quickly, cleanly, the wireless network came up, it did not spew complex technical messages at me and managed to stay in graphics mode.  Within minutes I was browsing the web under Ubuntu Desktop. When I rebooted the machine it started so fast I was awestruck.  Hmmm.

Back to Windows 10 attempted install.....

OK so Ubuntu installs fine so theres nothing wrong with the hard disk.  I go back into the installer and try every possible option and variant on getting the disk to format.  I search Google for the error message, others on the net have had the same error installing Windows 8! I try some of the suggested fixes.  Nothing works.  Further Googling finds a thread somewhere that suggests that the problem is because it is a USB3 stick.  OK well I am using a USB3 stick which I thought was  a good idea because they are fast.  Alright so I go back and make a new Windows 10 installer on an old USB stick that I have. Boom!  Problem solved, Windows 10 formats the hard disk and installs.

Why should Windows 10 not install if the installer is on a USB3 stick?  I don't know and I really don't care.  Certainly grandma would never get past that problem in her quest to install Windows 10.  It's concerning though that it appears to be a problem that was seen in Windows 8 so it's an old bug.

I'm not a fan of Desktop Linux but I'm left feeling rather unsettled that the Ubuntu Desktop install worked a whole lot smoother and better than Windows 10 install. What the heck does that mean?  Windows used to be the go-to OS for PC's because it actually managed to make all that diverse PC hardware work - is that not true any more?

When eventually I got into Windows 10 I'm sorry to say it felt kinda clunky.  The thing that bothers me most about Windows these days is that it feels like its designed by a committee, like it has problems that are too big to fix, and it feels like the outcome of deep corporate politics rather than the implementation of a clear vision of what an operating system should be.  I'll use it, but only when I need to.

At the end of my Windows 10 installation adventure I was left wondering, if you sat 1,000 ordinary people down in front of 1,000 average computers from the past five years, how many people would succeed installing Windows 10 without expert help? I suspect fewer than Satya Nadella would like.

Saturday, June 20, 2015

Windows 10, the cluelessness shows at step one.

Cluelessness, what a great word, if it's a word at all.

I left the Windows world many years ago fed up with its general cluelessness.

I'm not your garden variety anti-Microsoft neckbeard.  For most of my professional career I was a die-hard Microsoft fan.  In fact I'm not anti Microsoft at all. I'd really like it if they got back in the game.  But many years ago the myriad problems got the better of me and I left Windows for OSX where things just worked.

Anyway having heard so many great things about Windows 10 I decided to give Windows a fresh go.  I thought maybe Microsoft has wised up and is doing things that make sense.  So I bought a new laptop with plenty of RAM and disk ready for my return to Windows.

Yesterday I started the install process by going to get the install files to copy onto my USB stick.

And immediately, before taking one single step back into the Windows world, before Windows 10 could run one instruction on my machine, I was smacked in the face with the old Microsoft cluelessness and I despaired.  Here's what Microsoft says on the Windows 10 download page:

That's right.  If you want to install Windows 10, before you do absolutely anything, before they let you in the door, before you can run one line of Windows 10 code, you must first carry out the deeply arcane, difficult and problematic process of finding some way of copying the Windows 10 install files onto a USB stick.  Microsoft kindly reminds me that "DVD burning software often includes this capability".   Thanks. When Microsoft says "third-party program" what they mean is "some other bit of software that someone else may or may not have written, we don't really care".

Eventually I found some instructions on the web from how to do this on my Mac.  Here it is, you'll need to open a Unix terminal and type this command on your Apple Mac to commence the process of installing Windows 10:

dd if=en_windows_10_pro_insider_preview_10074_x64_dvd_6651360.iso of=/dev/disk4 bs=1m 

There's one for your grandmother to type in to upgrade Windows. Needless to say, the USB didn't boot and I don't know why and I really am not interested in why.

In the fantasy world in which Microsoft had a clue, they would have absolutely made damn sure that it was incredibly easy to get going.  They would have provided incredibly easy and reliable ways to create that USB stick from any version of Mac, Windows, Linux, even from versions ten years old, cause that's how long its been since some people have upgraded Windows.  It would have taken a matter of minutes, with clear and simple instructions and no need to leave the page at all.

Instead I have spent hours trying to do create an installable USB from Microsoft's install ISO, something that I have zero interest in and zero time for.

Undoubtedly I have returned to the world of Microsoft and Windows. I now expect the old cluelessness to pervade as ever it did before.

Wednesday, June 17, 2015

Levelling up as a software developer by doing nothing

I've noticed a strange thing. 

If I stop programming with a given language for a while - say a period of weeks or months - when I come back to it I often feel like I have "levelled up". 

I feel like understanding has fallen into place and fundamental concepts and learning have become embedded in my mind.  This puts me in a mental state whereby I am able to learn a whole bunch of new concepts that I would not have grasped earlier.

Sunday, June 7, 2015

Why how and not why?

Software development in 2015 requires that you rapidly learn vast numbers of technologies enough to sew them all together.

The most frustrating part of trying to learn all this stuff is that most documentation is focused on how to do something but not why you are doing it.  Rarely is context given of why what is being explained needs to be done, only how it is done.

Very frustrating.  If you are writing software documentation please start every page, every paragraph, every example, every solution, with why before how.