Ask HN: Hardware guy needs to learn web application development – what language?

After spending the past 10-ish years in hardware development, I have a business idea that I want to pursue. I'm not going to seek funding, I'm not really (yet) even looking for a tech co-founder. I want to develop this application that will be web based, and I want to do it slowly and learn along the way. I have some crude C++ skill and intermediate Python skill. My web app will incorporate drawing and hierarchies, with a database back-end. Basically Evernote and Visio combined.

We've all been there when a guy walks in your door and promises huge wealth if you'll just build and "be the geek". I'm going to be both this time.

So, HN, if you're in my shoes and moving from hard stuff to soft stuff - what language or toolset gives you the best bang for the buck? I'd like to make progress quickly but also have something I can build to be robust and perhaps bring professional developers in with me down the road.

21 points | by god_bless_texas 1927 days ago

15 comments

  • ajford 1927 days ago
    I second using Python and a framework like Flask. If you're already comfortable in Python, you'll be able to get off the ground faster, and be productive sooner.

    I would leverage a JS framework on the front end, as that will definitely improve the responsiveness. Perhaps something in React or whatever is the currently vogue framework.

    For drawing and graphics, D3 is really powerful and will help you avoid having to write all the drawing routines from scratch.

    • god_bless_texas 1927 days ago
      Holy mackerel. D3 actually already has the graphic type I need. It is possible I may have a working prototype today.

      You have helped me so much!

  • educationdata 1927 days ago
    Many times language is not the barrier. It is very likely it will take you less time to learn a new language than to learn a framework in a familiar language.

    Personally, I found PHP is the easiest to get into web development. You do not have to use MVC or any framework at all. For other languages (python, js), web development almost always requires using a framework, which can take more time to learn than learn the PHP language. And PHP is also easier for hosting.

    • tugberkk 1926 days ago
      This! I also don't think that you need frameworks for simple websites. If you are familiar with one, OK; but if you are not, you need to learn the "framework".
      • Yptur 1926 days ago
        Also from my personal experience if you DO want to learn about a PHP framework: Laravel is a great framework and Laracasts is a great learning ressource, I wish more frameworks/languages had learning ressources like that (yeah I know Laracasts does some extra stuff as well :)) I can only recommend it.

        That being said the other options are great as well, JS has come a long way since the days of yore.

        PS: It's all going to be a bit... rocky in the beginning. No matter what you choose. It takes a while to wrap your head around everything but it is doable in a decent timeframe.

  • r4victor 1927 days ago
    Since you're already familiar with Python, I would recommend it for the backend. Take a look at Django and Flask frameworks. Django has an ORM and fits well for a typical CRUD application. Flask is a more lightweight tool. Both are quite mature and pleasant to work with.
  • arcticwombat 1927 days ago
    Since you want to do drawings and stuff we're definitely talking JavaScript and graphic frameworks, either raw canvas or something like the D3 library would be my guess.

    For the backend, although it pains me to say so, I suggest PHP simply because there's a metric fkton of tutorials, guide, mentors, bootcamps, and what-have-you.

    However, if your goal is to expand one day and hire on developers, I'd look around your area to see what's in demand and go with that, as it'll be your best bet to find developers later on.

    I'm sure you'll get lots of suggestions for JS frontend frameworks, but honestly I'd stay away from them and go with the basics, JavaScript + JQuery + D3, plenty powerful and doesn't have the extra learning curve of whatever flavor-of-the-month JS framework.

    Personally I'd not use PHP because I don't like to work in it, and I'm more productive in other languages, but there's no denying it's the most used webserver language in existence, it's updated/modern, hosting is cheap, and there are LOADS of information out there for how to do just about anything.

  • jungler 1927 days ago
    Bias heavily towards ease of debug and deployment. When you're the one-man-band you need to leverage all the tooling towards realizing the design, and avoid the scaling rabbit hole. That means - simple now, rewritable later as you bring in hires.

    You will need a solution for producing front end JS/HTML/CSS. This should probably be your starting point in fact - create a site mockup with static pages and no real backend, use that to gain feedback, then build out the real functionality. For JS code Typescript is a very popular option to aid some additional maintainability. There are also many build systems available for compiling finished pages.

    When you're ready to have a backend, you can evaluate it separately later. You need a combination of a language, a web server, and a database at minimum. Again, an early site can avoid horizontal scaling and focus on having one good database doing everything and backing everything up reliably. (Focus backend efforts on reliability first!)

  • saluki 1927 days ago
    If you're already familiar with python look at Django.

    I would recommend taking a look at Rails (ruby) and Laravel (PHP).

    Laravel is probably the best bang for your buck. https://laracasts.com/series/laravel-from-scratch-2018/episo...

    Laracasts, is a great way to get up and running.

    I would start creating a standard web applications with just enough js+jQuery in the beginning vs doing a full SPA with vue or react. You can do that with version 2 if things take off.

  • oblib 1927 days ago
    I've been using the Apache web server and CouchDB on the server side along with PouchDB.js, jQuery, Bootstrap, and Service Workers on the client side.

    This provides most everything needed to create a feature rich "Single Page, Offline First, Progressive, web app.

    Almost all of the app code is Javascript. What little server side code is needed I write in Perl, but Python would work just as well.

    Personally, I think CouchDB/PouchDB is highly underrated. I believe the reason for this is that most developers started out using an SQL backend DB and are too lazy to learn how to use CouchDB.

    I don't mean that to be an insult, they're using what they know and that's to be expected, but they don't know what they're missing by not learning how to use CouchDB/PouchDB, and they're missing a lot.

    CouchDB was designed from the ground up for the web apps. It has features that make it much easier to develop multiuser apps and PouchDB makes it incredibly easy to implement them. User signup, authentication, permissions, are all very easy to implement. CRUD routines and Full Text Search are super easy, and lightening fast. Live Data Sync for multiuser/collaborative apps is builtin.

    Adding offline first capabilties is easy using Google's "Workbox" (https://developers.google.com/web/tools/workbox/).

    That's a pretty powerful foundation to build upon.

    • Torgo 1926 days ago
      Please do a writeup on something you've built, I am extremely interested.
      • oblib 1924 days ago
        You can find more info about this approach and a "blog" app I've been working on at Azartiz.com.
  • ArtWomb 1927 days ago
    This caught my attention because of the mention of MS Visio. I used to use it quite a bit back in the day. And I think a web port is a terrific idea!

    Honestly, if you can teach yourself the basics. Your main tech challenge domains will be network and canvas rendering runtime debugging.

    Take a look at High Performance Browser Networking

    https://hpbn.co/

    And Google's series of Udacity courses on building performant web apps

    https://www.udacity.com/course/browser-rendering-optimizatio...

    Best of luck ;)

  • lewisjoe 1927 days ago
    Django(Python) for backend. React for the front-end.

    Pros:

    + You are already a bit familiar with Python

    + Django provides out of the box solutions for authentication, db management, migrations + bunch of stuff that takes quite a bit of effort

    + React is easy to grasp, since there isn't many buzzwords and concepts. Basically it's just JS.

    Cons:

    - You have to put effort in learning Javascript and browser fundamentals. There's no running away from it.

    I built http://writango.com with the stack I mentioned. Literally took me a weekend to get the project's first version up.

  • pascalxus 1927 days ago
    The so called modern day web frameworks (Vue, React, etc) are needed if you want to get a job and become a hardcore FE developer.

    But, if you just want something that will maximize your productivity, you should stick to the basics: HTML, CSS, Javascript and jQuery. It's super easy and will get your web app done much more quickly than anything else. Otherwise, you'll end up in a rabbit-hole spending days just getting your infrastructure set up.

  • verdverm 1927 days ago
    I'd recommend full stack JavaScript because it's so pervasive. You'll find many more learning resources and starter kits.
  • dublin 1927 days ago
    Flask isn't bad, but as an absolute beginner, you might want to start with a "batteries included" web app platform like Web2Py. It's surprisingly good, and I've had teams use it as the basis for a fairly complex prototype that became a sophisticated product.
  • snake117 1927 days ago
    If you are feeling a bit adventurous and open-minded as you begin this venture, I would highly suggest looking into Elixir and Phoenix, especially since you are asking for "...best bang for the buck".

    In fact, the 1.8.0 release for Elixir was just announced earlier today here: https://elixir-lang.org/blog/2019/01/14/elixir-v1-8-0-releas... (https://news.ycombinator.com/item?id=18903602)

    What makes Phoenix great is that, not only is it blazing fast, but the framework serves as more of a web interface to your application as oppose to "taking over" your application, like with other major frameworks. Moreover, you get the full power of Erlang and OTP as well. I will have to say that some things are a little rough still, like deploying your application. This process is not as smooth as what you would experience with a Rails or Django app, but it will definitely get better over time. One of the features of Phoenix that is also really exciting is LiveView. If you have some time, definitely check out Chris McCord's 2018 keynote: https://www.youtube.com/watch?v=Z2DU0qLfPIY

    There are a lot of great books and resources to explore. I listed a few below:

    https://elixirforum.com/

    https://elixircasts.io/

    https://www.manning.com/books/elixir-in-action-second-editio... (just released)

    https://pragprog.com/titles/category/elixir?f[sort_by]=pubda...

    https://www.manning.com/books/phoenix-in-action

    With regards to Python, I cannot give too much recommendation as I have experience in Ruby/Rails and Elixir/Phoenix primarily. However, if you really want to begin building, stick with Python, since you already have experience with that language, and look into a popular framework, like Django or Flask.

    • newen 1927 days ago
      I created my first dynamic website using Phoenix, coming from a data mining background. I knew about HTML and CSS but that was it. I followed one of the Phoenix books, and managed to make a full blog website in a couple of weeks in my spare time. Though Phoenix tutorials and books in general tend to assume that you know how to use Javascript, and so I never really picked up how to make a proper Javascript-based website with React (or whatever) except for copy-pasting relevant stuff. Anyway, overall pleasant and easy experience since Elixir is very logical and straightforward.
  • mars4rp 1927 days ago
    Use a functional language, it is way closer to verilog or vhdl. Global variables need different mental model. My experience when I switched.
  • god_bless_texas 1927 days ago
    Thank you much so far, I installed Django and am trying that with bootstrap to see how far I can go.