I am almost a complete newbie when it comes to using Node.js and all the other JavaScript frameworks I’m planning to use for this project. I used JavaScript for some web apps pre-jQuery and a little bit of Ajax stuff using jQuery, but I don’t have any experience with modern JavaScript or how it is used on the server side.

I’m also going to be trying to BDD everything which I’ve done a little bit of and found helpful, but I’ve always ditched it mid-project because it would get hard to keep the discipline when UI elements entered the picture or a new concept would cause me to rewrite old tests. I’m hoping that documenting these difficulties will help me think through the difficulties and maintain the discipline.

I plan to make better use of Git as well. I’ve tried to adhere to branching for each new feature on several projects, but it always suffers the same fate as BDD. I just want to keep moving and the discipline to maintain a branching strategy goes out the window. I’m going to try to use GitFlow and I’m hoping once again that documenting my experience will help me maintain my discipline.

Lastly, consistently carving out time to work on this project will be difficult. Besides my wife and daughters, I have my work commitments of course, I have serveral offices and obligations with my church, and I’m a Warriors fan in middle of another playoff run. In this area I’ll also be writing about how I’m fitting everything in.

I’m really looking forward to all these challenges. I want to test and improve my focus and my skills.

I’m approaching my 25th year as a software developer and I still love it. When I think about what I would do with my time if I could do anything I would study Lutheran theology and develop software. In fact, I would combine the two and develop software that required me to study Lutheran theology. However, as I get older there are several barriers that make it hard for me as a long-time member of the software development community to keep pace.

Enthusiasm of Youth

I’m not talking about how excited I am about working on software projects, I’m referring to the enthusiasm of jumping on the latest and greatest new technology. When I was young I would jump on anything that seemed new and hot. Forays into OpenDoc, Copeland, Dylan, Java Applets, DHTML, Swing apps, Facebook apps, Google App Engine, the Semantic Web, XSLT, SOAP, etc. have made me weary of pour my time and energy into technologies that end up going nowhere. Also, my definition of knowing a technology has changed. In my youth, if I wrote a toy program using a technology I would consider myself knowledgable. Now I would have to have used it in several projects and know the major strengths, weaknesses, and gotchas before I would say I knew a particular technlogy.

[Something about overcoming this]

Time

Having two daughters, a wife, and a diversity of interests leaves me with less time to experiment with techology than 15 years ago. A Friday night that used to be spent staying up late and working on a side project has become squeezing in a half an hour to read a few pages in a programming book between the Friday night school fundrasier and going to bed so I can get up early ti take one of the girls to an activity Saturday morning.

[SOmething about overcoming this]

So Much New Stuff

[All the stuff I’m learning Angular, TypeScript, MyBatis, Node.js, Express.js, microservices, BDD, AWS]

[How do I choose which to use]

In Java there is the idea of [100% Pure Java}](http://www.javacoffeebreak.com/faq/faq0006.html). Put simply it is the idea that your code contains no OS native calls. This idea came from the desire to have completely portable programs. As Swift migrates to different platforms I wonder if we will see this desire come to it. I assume this would be useful for server apps built with Swift. Also, it depends on the language itself. Does Swift and its standard library lend themselves to writing platform agnostic code. If the facilities to write server apps aren’t built into Swift and the standard library (like I/O or concurrency or whatever) then people will have to write and link in platform specific code which ends that dream.

I’m guessing that the easiest work is done in that there are Mac OS and Linux implementations of Swift which I assume means that 100% Pure Swift is possible on *nix based systems. I’m not sure how well the language plays with Windows since Apple hasn’t provided a Windows port.

There is rumor that Google is considering making Swift a “first class” language for Android. I don’t know what “first class” would mean in the context of Android, but I would assume that it means that Swift could be used in the standard Android tool chain in the same way that Java is now. I could see how this could be a big deal and how it might not be.

For the change to happen, all the Android API’s would need to be exposed as Swift API’s and then the Swift source code would need to be compiled to Android bytecode. This seems rather trivial for the big brains at Google. So I don’t really see this as any kind of technical challenge. But how do you introduce and migrate this into the developer’s tool chain when 60% of your userbase uses an OS version more than 2 years old. So if developers aren’t likely to switch to your new tools, why develop them and what is the calculus for how likely and how many switchers are needed to make the switch make sense?

Moving to Swift might cause me to re-evaluate development for Android. The main reason I don’t is that I do Java at work and have no desire to see more of that style of coding. However, Swift for Android isn’t likely to make development easier as Cocoa Touch and the other frameworks that make up the substantive parts of app development aren’t part of the open source project. I’d get to use the language, which is one level of expertise, but the libraries would be completely foreign and incompatible.

What IBM does in the technology field has little bearing on me anymore. They are in the business of consulting and services to very large enterprises and my interests lie largely on the opposite end of the spectrum. So it is a little bit of cherry picking when I mention their adoption of Swift on their servers and cloud services as a positive sign for Swift. A more balanced view would that it’s interesting that IBM is putting some wood behind their Swift efforts.

IBM does have an enterprise deal with Apple and if Apple is moving toward Swift why wouldn’t they. Swift being open source gives IBM more reason to put it on their servers and cloud. IBM already develops their own JVM which I assume they have to license and pay money to Oracle to do and since Oracle is a competitor why would they want to keep doing that especially for a technology that has seen its heyday. If they can build new platforms and applications using an existing partners technology that they don’t have to license it makes sense for them to go in this direction.

So while IBM supporting Swift isn’t a big deal for me, it does improve the likely hood of Swift’s long-term viability which is interesting.