Breaking up with JavaScript

George Katsanos on September 02, 2018

I started building "websites" as a CS student back in 2005. I was quickly intrigued about the possibility to use a CMS like Joomla, Drupal or Wor... [Read Full]
markdown guide
 

Have you tried typescript? It makes JavaScript better. You get all that typed goodness your missing in regular old JS, and VSCode has some great intellisense for it.

 
 

Switching to a new ecosystem is always exciting and gives you a fresh perspective on things that you might not have seen before. I'd say give it time. See it through the honeymoon phase. Everything is shiny up until we realize that these are just tools to solve our problems. If after all these and you're still in love with the new language/ecosystem and your situation permits, I'd say ride that enthusiasm and go for that career change!

 

Like the word "honeymmoon phase". I have tried so many different languages and technologies during my career. Longer I go, clearer gets to me that, language and technologies are not the most exciting thing (because honeymoon phase will end) but the result that we create and communication with other team members.

 

Came here to say this! As a junior iOS and Node dev I've done both professionally for maybe 9 months each. I enjoy both environments but each has their downsides. I was educated in OOP extensively so I have a bias towards type systems. I love Swift but hate Xcode (I've managed to bring all my colleagues to the VSCode holy land). I enjoy JS and most of the issues I have with it have been fixed in ES6 and avoiding this wherever possible. I'd still love to move over to TypeScript at work but I've yet to find the opportunity to showcase it to my colleagues.

Basically OP, John is right here. And like Patrick M suggest maybe try TypeScript.

 

There were many things I liked about Xcode but nothing uniquely special compared to other editors and positives were ultimately outweighed by the negatives.

I haven't used the most recent version in anger, V9 I think, so YMMV. But it was often super slow in small projects with maybe 50 classes. It would take seconds when doing anything with interface builder. Also, with interface builder using XML for everything it was a horror to use with Git so I'm investigating either code generated UI or having many tiny storyboard files. But then making reusable nib files etc. was always felt clunky. It would also get caught in an indexing loop often, requiring a restart. They only just added basic Swift refactoring features in the recent major version, which might be related to the shifting ABI (they keep saying pushing stable ABI back to the next release) but I don't know. The different between adding folders or groups not being intuitive and I think defaulting to groups, requiring you to manually add all the files inside the matching folder for Xcode to recognise them. That final point might be inaccurate from memory but something about that process was always annoying.

I know that it's a free piece of software but compared to every other IDE I've used it always felt lacking. Considering iOS development is so tightly coupled to Xcode it felt like there were no major benefits using Xcode to program, other than interface builder which was always slow or required some multi window stuff. And I always felt very constrained when working remote or from home without a big second monitor, Xcode on a 15" MBP felt cramped.

Maybe I should play with AppCode next time I get some iOS work on my plate.

 

Sounds like you need a refreshing change of perspective.

I was burned out of JavaScript as well, 1 year ago.

Then I spent one month working full time day and night with Go, which I think is exactly the opposite of JavaScript. They encourage you to not use libraries (there is no official dependencies/package management solution) and write your own code instead, maybe reinventing the wheel every time.

It's also a much lower level language (like Swift), and more strict in many ways, and in the end I think it makes you appreciate the freedom that JavaScript gives you and the huge ecosystem that's been built around it.

Buggy and unmaintained libraries exist everywhere. In JavaScript this might happen a lot more simply because there are a lot more libraries, but that's an opinionated view on the topic.

Definitely look into other languages, as anything different you learn helps you grow.

 

I like this answer a lot, it relates to me because I do javascript on a daily basis even for outside projects, I get burned of it often. Then I start to play with other languages and yeah, everything seems cool and shiny until you realize there are a ton of flask libraries that are buggy and un-maintained, that there is a ton of boilerplate code for .net projects etc. And you end up realizing it's not Language X's problem but dev tools in general.
In the end I just end up going back to js and keep doing what I like

 

Try ELM programming language. It compiles to JS. It's statically typed language. The compiler is similar to swift in the sense that it doesn't let you compile with mistakes. Error messages are great.

The language has a promise of "No Runtime Exceptions".

I'm gonna link a presentation (which is one of the best presentations ever):

youtu.be/kuOCx0QeQ5c

 

For one thing, you won't see anarchy in ELM. ELM has built in things like: immutability, virtual dom, state (redox like), architecture, tiny assets, improve compiler (faster in 0.19), tree shaking.

I strongly advise you to watch the presentation at least give it a minuter you won't regret it I promise that.

 

I definitely will! The question is always finding projects that use this technology..

 

I'm not sure if your discontent is with JavaScript at large (which you still have to deal with if you change backend language and ditch Node on the server) or just Node, or both.

Since you mentioned iOS I guess you have to understand, by practicing beyond a tutorial, if you're really into mobile development or if it's just a reaction to the disappointment that the Node ecosystem brought you.

So the question: are you looking for a more structured environment to develop on the server/backend side (hence your appreciation for Swift and Kotlin) or you want to switch altogether to mobile?

 

Valid questions. Not sure yet. I definitely would like the structured environment of development. Mobile development is something that I guess would be nice to get into. But the tricky part is throwing away years of experience and starting over

 

What experience do you throw away by switching to mobile development? I'm sure you've learned much more about programming in general rather than some Node.js specific things.

I even doubt that anyone can "throw away" experience. It's there in your mind, but you'd know more and get more experience if you will learn Kotlin or Swift.

Don't be scared of learning something completely new. That's a nature of humans. We learn more and more and those who don't usually lose.

 

Well maybe what you're looking for is in the middle. A more structured programming language that you can use on the web too. I know Swift and Kotlin both have web frameworks but I'm not sure how big the community around them is and the job market for those. You could consider checking out Go which checks a lot of your boxes: strongly typed, fantastic IDE support, comprehensive standard library, as fast or faster than Node. There are definitely less third party packages than Node but that might be a plus :D

Valid alternatives can be Python or Ruby, though they are both dynamic (so less structure in a sense), they are solid "boring" languages with a long history and huge communities.

I guess Elixir (functional and dynamic) it's also a valid alternative.

Anyhow, you'll figure out with time if you're interested in mobile development or just looking for another language to replace JavaScript on the server :-)

 

I do foresee one problem with your proposed switching of gears. It sounds as though your experience with Swift has encouraged you to get into mobile development. But a lot of organizations don't want to employ native iOS or Android development these days, the main reason being they'd have to maintain two separate applications, one for iOS and one for Android phones. Hence we have Ionic and React Native, probably the two biggest frameworks for cross-platform mobile development at the moment. Unfortunately for you, these frameworks are built around JavaScript. It takes the place that, say, Java holds in an Android application, being used to access the native APIs, make calls to backend services, and do pretty much everything short of querying a database. HTML and CSS are used to control the layout. On the one hand it would be familiar. You could use HTML, CSS, and JS. But the obvious takeaway here is that developing mobile apps doesn't necessarily mean ditching JavaScript. I'm sure there are organizations that use Swift, but I would assume they're getting to be fewer and fewer in number. Even the cross-platform approach may require native code at times, but not all that often. Now, TypeScript, Angular, and React (generally integral to these frameworks) would still provide a more structured way of doing things. Before you take this as discouragement, see if there are jobs as a native iOS developer where you are/would like to be.
And, to second someone else's advice: do give it some time. You won't really know whether it's for you until you've built something with it. My interest in mobile development was much higher during the first couple weeks than it is now.

 

This is very much incorrect. Sure, companies try out React Native, but more and more are ditching it due to it just not being good enough. Native development is always better, and native developers will always be in demand. Please stop spreading FUD.

 

Is native development "always better"? What if I'm a startup with limited resources and three developers that wants to reach everyone, regardless of their device?
Thanks for the criticism. I think the cross-platform approach will always be appealing to groups with fewer resources, but I agree that it's limited, especially when you want to do something that touches the operating system and the unique capabilities of a given platform. In my experience, it's actually a total pain in that case.
How about I rephrase it: some people happen to use JavaScript for mobile development, but if you wanna do Swift, go do Swift. He's right, you'll very likely find a job, and I shouldn't have painted anything like a black-and-white picture when there are plenty of people on both sides of the argument (and thus jobs for Swift people).

I'm totally in agreement with you here. I work at a startup with constrained resources. We don't have a mobile app but we have been throwing around the idea of creating a desktop app where it's a similar conundrum: go native or use electron? And in the end, we have 6 JavaScript-y developers, customers with solid machines, and a web app as a primary focus.

Creating an electron app from a web app is a cinch and can easily be improved upon over time to deliver a better experience. Once we grow large enough, or the desktop app becomes a huge draw for new clients, we can dedicate time to native.

I imagine react-native faces something similar, though from what I've seen, RN is still a good option for most apps.

 

In general I like building for all platforms, but every time I have to write Javascript for the web it's a nightmare. I compare that to iOS or Android or Golang and it's like the web is in a whole other league of suck.

I encourage you to look at focusing on a stack that you really feel at home with, you'll be happier.

 

What's tricky is jumping from one stack to the other when you have 10 years of pure frontend/CSS/JS experience.

 

I've had more fun in the last couple years learning Swift and iOS development than I have in a long time, it rejuvenated my career and my love for programming.

My best advice for you is to try and mimic an app that you like. You'll see things like neat little animations and end up going down a rabbit hole trying to figure out how to do it yourself.

Also, try to get something into the app store. You'll learn a lot about the whole process and get to experience the highs and lows of your app going through the Apple approval process.

 

Do it! I'm an iOS developer, and I fell in love with Swift the day it came out. It's such a satisfying language to work with. Once you go down the directive of native apps, you never want to go back to web. The web world feels so far behind in so many respects.

 

For as flawed as many people say Xcode is (and it is), it's a Lamborghini compared to pretty much anything else. Here's what I think happened, and it's really simple. You've been driving crappy cars your entire life, and you suddenly got behind the wheel of something high quality. You don't need to argue for or explain how you feel. You just know you like it, and you want more of it.

I think Apple's care for the user experience bleeds beyond its own consumer products. I think they take the same care into the developer tools they design. They only hire programmers who have that sort of vision, and it comes through in everything they do.

You like this experience because someone designed it to be better than anything else on the market.

People are going to tell you to come back to Javascript, and they will bring fantastic arguments with them. They'll tell you it isn't that bad if you use such and such tool. They'll tell you about the marketplace and how few job opportunities are in native Swift. And the thing is, many of them will be right.

But none of their arguments could possibly replace the feeling you get when you work with a great tool. Let that be the motivator in the long term, even if you have to work with Javascript in the short term.

 

Absolutely learn another language or two, it can be good to see what other fish are in the sea. Maybe you'll fall madly in love and never look back. However you may someday surprise yourself and come running back to javascript, realizing that what is really important to you has been right here all along.

 

My take is that every framework, language or platform has advantages and disadvantages, every single one. Some are easier to spot than others. I would suggest, use it for one serious project. Then, you will know.

 

As @binarypatrick mentions, if types are what you're looking for, consider TypeScript. I wrote up a little intro to TypeScript a while back.

In fact, it says a lot about TypeScript if the creator of node.js is building a new secure TypeScript runtime on V8. Great video and some other points about node.js in this post.

 

I got to program in TypeScript (v0.8) for two years. It definitely facilitated making a large scale application more robust and reliable.

The nice thing about it was getting ES6 features on ES3 & ES5 engines. Plus static typing.

The disappointing thing about it was it not being CoffeeScript. (Or more to my liking, the abandoned GorillaScript, which was a more well thought out kind of CoffeeScript. In my opinion.)

These days, we have ES6. Takes a bit of the new car smell out of TypeScript. (Albeit it without static typing. Yet. That may come someday.)

Personally, I'm waiting for Elm 1.0.

In the meantime, I'm back in C++ land. (Ow ow ow.)

 

Well.. I would say it's always nice and exciting to see and experience something with a beginner's mind. I jumped into js realm about a year ago, mostly exploring node as backend and react/vue as front-end and today it feels like I am getting sucked deeper and deeper into these stuff and it's getting more exciting everyday.

I wish you enjoy your journey my friend...

 

I also felt the whoa when I tried Swift, so I know what you mean!

It's never wrong to check out other langs. Especially in Frontend, I think it's important to know other means of developing interfaces. There are lots of out there: Qt, JavaFX, Immediate-mode GUI vs. Retained, React Native, VB, iOS Constraint-Layouts, Unity-UI etc.

It gives you a broader perspective and maybe some appreciation for Frontend-Dev.

Career-wise keep in mind that the iOS-Platform also has C#, and I'm not sure if you can go Swift-Only just yet in that environment, since lots of apps out there are still not using it.

 

Knowing more languages and paradigms will make you a better developer. I like the general rule: learn 1 new language each year (at a superficial level ofc). Knowing a Strongtype language is the closest next step, Reactive paradigm (if you don't use Redux yet), and at the other end is the Functional Paradigm.

That being said, you saw it yourself, a JavaScript medium-large project is very hard to maintain, thats why the 'big boys' are using a strong type superscript like TypeScript.

So my suggestion is to learn Java and TypeScript :)) if you want to stick to the web. If you go on mobile you may want to check Flutter too or Kotlin.

Either way I don't blame you, I hope to leave the JS arena myself soon, "I'm too old for this 💩".

 

Hey George,

I've experienced similar frustrations working within the JavaScript ecosystem. I want to ask if you've looked into Dart at all? It's strongly typed and comes with good tooling for Fullstack development. It's also pretty good for mobile development with the Flutter framework.

Just search for "dart" and read some of the articles. I'm curious to gather your thoughts on this.

 

Great article. I'm an older (not necessarily more trained) IT guy who now needs to develop as full time job. All my life I used high level tools like Clipper, Delphi and then PHP. All of a sudden I need to develop for mobile; while trying my best for a PWA in PHP, I learned about Nativescript. Great tool. But I see what you mean about node.js. You need blind Faith to go along. As other say here, Typescript helped a lot. I'd try Swift but I really long for a tool to build ios/android apps with a (sorta) single codebase

 

I feel the same. At work, we are using nodejs + react and boy, everything is a struggle; Everytime there's an update with the packages, somewhere somehow, different bugs are introduced.

I'm high considering going back to dotnetcore or springboot for the next project and keeping react frontend for now.

 

Have you looked into ReasonML at all yet? It let's you keep developing for the web, without throwing away all that React knowledge (ReasonReact) and addresses many of the problems you cite with JS. And unlike Typescript, it is a true strongly typed language, built on top of the battle tested OCaml, with a syntax meant to be more familiar to JS devs (go try reading some pure OCaml!).

The eco system is getting more and more mature every day and the community is still small enough where getting help on their discord channel is a guarantee (the community is the most welcoming I've ever joined). It practically eliminates runtime errors, it compiles blazing fast and it's for the front end as well as the server.

Teams are using it in production, though it's not that widespread yet, so not sure if you can learn it and go out and get a job programming in reason somewhere yet, but you can introduce it at work perhaps, and it will add another tool to your tool belt and keep you engaged with the web.

I highly recommend checking it out! Good luck.

 
code of conduct - report abuse