DEV Community

loading...

Breaking up with JavaScript

katsanos_george profile image George Katsanos ・2 min read

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 Wordpress and have something up and running for the world to see in minutes. I became more and more involved in HTMl and CSS and before you know it I was a Junior Frontend Developer.

It took time and hours of work to get the intricacies of CSS, then SASS and SASS architecture, then CSS3. I reached a point where I was able to not only be autonomous but also lead other Frontend developers.

Then came the JavaScript craze. That was a different kind of beast. Interacting with the DOM was not enough anymore; you had to do MVC or MVVM or whatever. Those were concepts I was not familiar with and it took time until I felt comfortable with a framework. (that came with Vue/React)

But something still doesn't feel very right.

The other day I started a tutorial on Swift/iOS and damn it felt good. There are many concepts which I'll need to learn as they don't exist in JS but I feel as if a language like Swift or Kotlin is much more mature and easy to work with; Comparing joining a complex Node.js project with hundreds of files and a Swift one.

Strongly typed with an IDE that can spot errors on compile time, one entity behind the language to support it. Have you ever tried Linux and then FreeBSD? You must understand what I mean then. Anarchy vs Structure. The constant struggle on which NodeJS user lib should I use? Just to find out its buggy and unmaintained some days later.

So I've been flirting with the idea of a small career change and would love to hear your opinions, especially if you've had similar experiences.

Discussion

pic
Editor guide
Collapse
binarypatrick profile image
Patrick M

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.

Collapse
amineamami profile image
Collapse
alchermd profile image
John Alcher

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!

Collapse
antonybaasan profile image
Antony Baasandorj

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.

Collapse
matt123miller profile image
Matt Miller (he/him)

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.

Collapse
alchermd profile image
John Alcher

Hey! What's up with Xcode that you didn't like?

Thread Thread
matt123miller profile image
Matt Miller (he/him)

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.

Collapse
flaviocopes profile image
flavio ⚑️πŸ”₯

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.

Collapse
tunaxor profile image
Angel D. Munoz

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

Collapse
antonrich profile image
Anton

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

Collapse
antonrich profile image
Anton

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.

Collapse
katsanos_george profile image
George Katsanos Author

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

Collapse
rhymes profile image
rhymes

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?

Collapse
katsanos_george profile image
George Katsanos Author

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

Collapse
defman profile image
Sergey Kislyakov πŸ‡·πŸ‡ΊπŸ‡ΊπŸ‡Έ

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.

Collapse
rhymes profile image
rhymes

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 :-)

Collapse
rockarts profile image
Steven Rockarts

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.

Collapse
aop4 profile image
Andrew Puglionesi

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.

Collapse
gabek profile image
Gabe Kangas

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.

Collapse
aop4 profile image
Andrew Puglionesi

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).

Thread Thread
antjanus profile image
Antonin Januska

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.

Collapse
gabek profile image
Gabe Kangas

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.

Collapse
katsanos_george profile image
George Katsanos Author

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

Collapse
nwitmer profile image
Nathaniel Witmer

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.

Collapse
kzagoris profile image
Konstantinos Zagoris

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.

Collapse
niorad profile image
Antonio Radovcic

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.

Collapse
bgadrian profile image
Adrian B.G.

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 πŸ’©".

Collapse
graphicbeacon profile image
Jermaine Oppong

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.

Collapse
nickytonline profile image
Nick Taylor (he/him)

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.

Collapse
eljayadobe profile image
Eljay-Adobe

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.)

Collapse
nostackdubsack profile image
Peter Weinberg

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.

Collapse
vasilenka profile image
.h

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...

Collapse
heres41 profile image
heres41

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.

Collapse
cdsaenz profile image
Charly S.

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