• 0 Posts
  • 18 Comments
Joined 1 year ago
cake
Cake day: July 14th, 2023

help-circle



  • An interview is just a test.

    Whenever I speak with students/new grads about interviewing I actually specifically advise them that an interview is not a test. Yes, you need to have a certain level of base skills, but beyond that, an interview is much more like a date than a test. I say this because you can do everything right and still be rejected. It doesn’t mean that you did anything wrong or there’s anything with wrong with you, but rather there just wasn’t a match between you and the company you were interviewing with at that point in time. There are so many factors entirely outside of your control that determine if you’re given an offer or are rejected to the point that I find it really tough to consider it a “test” in the academic sense where you need to score a certain value to pass or fail it.

    Likewise, it’s incredibly common for students/new grads to focus heavily on the technical skills while completely ignoring the soft skills. The best thing you can do in an interview is make the interviewer like you and want to work with you. It’s amazing how many people will overlook subpar technical skills either consciously or subconsciously if they feel comfortable with you (the amount of borderline incompetent people I’ve seen hired that are otherwise smooth talkers is astounding). It seems like the author of the linked to article here might be falling into that trap too. He writes about his technical experience heavily but does not touch on the soft skills at all, even questioning at one point that he may simply be bad at interviewing which is a strong sign to me that he’s not presenting himself well in the interview.

    This is something that transcends software engineering. If you’re a sociable and likeable person you’ll go far further in life than the person that is quietly a genius but doesn’t work well with others. I wish more people folks in this industry would focus on that side of the coin instead of simply saying “grind Leetcode more to get more offers.”


  • Considering the amount of flat out incorrect or wildly off-base code GPT has generated on surprisingly simple tasks over the past nearly year now, no, I’m not too worried about my job. I find it handy for time to time in replacing stuff I previously used a search engine for which makes it a productivity booster for me, but for anything novel or not straightforward (aka, anything outside of its training set, which is what I’d ideally want to use it for), it’s less than useful or actively harmful in trying to lead me down the wrong path. Overall, it still requires a human with significant knowledge in the field to know how to use the information these tools generate and how to put the pieces together to do something useful. I don’t see how that could change until there is an actual reasoning artificial intelligence brain developed which is a BIG ask, if it’s even possible in our lifetimes, or ever.

    …or maybe we’ll all be out of a job in 10 years. Humans are quite bad at predicting the future and I am indeed human.

    And for what it’s worth, no I did not RTFA. I’ve spent enough time reading articles prophesizing the doom of software engineering due to generative AI and don’t feel like wasting more time on the topic.


  • I could be mistaken, but I believe these sites are normally “using rails” (as in they shell out to other languages, Go has become common, for performance critical end points or portions of those end points that need to work a bit harder). I also suspect they’ve got some pretty heavy modifications.

    I can’t speak to what they’re doing internally, but I would agree this is a safe assumption. I think the point though is that Rails, with some help of external services depending on use case, can certainly be scaled out to a level that is far above the average web service making it more than capable of handling 95% of use cases you could throw at it. In the case of Shopify, they’ve traditionally been great about contributing optimizations back to Rails so their performance optimizations are shared with the larger ecosystem (and has the benefit of keeping them closer to upstream).

    The Ruby language itself has fibers, but last I knew Rails was not making use of fibers for ActiveRecord. The problem is effectively you’re in an interpreted language (bad enough) without real parallelism (worse). So, when any IO occurs one of your non-parallel threads is blocked.

    To your point, Ruby recently introduced Ractors which are true parallelism. They’re new enough that their use isn’t widespread yet, but I’ve played around with them and it’s definitely neat to have real parallelism in Ruby now. And for web services, this would depend too on the web server. For example, using Puma or Unicorn will have multiple worker processes so there is some parallelism between requests regardless.

    The problem you run into here is a lack of mature libraries to leverage if you want to do anything non-trivial. e.g., our application needed to read from spreadsheets. The Ruby libraries either A) didn’t have support for common formats like xls or B) would load the entire spread sheet into memory represented as Ruby objects (you can predict how well that performed :) ).

    Yeah, I get that. For what it’s worth, I really can’t think of a situation where there hasn’t been some library written in Ruby for something that I needed shy of extremely esoteric stuff that I likely would have needed to write myself if working in another language anyway. But that’s going to be highly dependent on a case-by-case basis. For what it’s worth, I make it a point to use as few third-party libraries as I can unless they’re highly popular. It’s a problem in all languages that random person’s pet project library, while highly useful, becomes abandonware far too often.

    I think we eventually started using something akin to that. However, I’m a big advocate for making the wrong thing look wrong/complicated, and Rails very often makes the wrong thing look simple. Note that gems like this don’t really solve the problem they just inform you when you’ve made the mistake, or alternatively forcing your app into hammering your database even in situations when it doesn’t need to

    You might be referring to the Bullet gem which is just a notification that there’s an N+1 and where to find it so it may be fixed. However, the JIT Preloader gem actually does automatically solve the problem of N+1s in nearly all cases (see the README for details if you’re curious). It’s the closest to a silver bullet solution for the N+1 problem as I’ve seen and I now give almost zero thought to N+1s anymore. I know the devs were wanting to get it merged into Rails to solve this problem for everyone, but I don’t know what happened to that effort.

    I agree, but there is something to be said for hiring people that are extremely knowledgeable in the framework to help highlight solutions (like those you’ve mentioned here) vs “you’re a great C++ dev, now go do Ruby!”

    Right, I wouldn’t portend that anyone can make an easy switch from, say, embedded systems to web development in a few weeks or even a few months. I meant more like if you’re competent web developer the core concepts of building web backends/frontends don’t vary all that much between frameworks. At the end of the day, the underlying concepts deal with HTTP and HTML/JS/CSS so if you have a solid understanding of the base concepts and system design for the backend it shouldn’t be much trouble to switch the framework sitting on top of those, especially if you have a team around you that is effective at code reviews, answering questions, and generally investing in new employees. Like you said, switching from something totally unrelated is a different situation though.

    Thanks for a thoughtful reply, by the way. :) I really shy away from getting into pointless internet fanboy debates over which tool/language/framework is “best” but always enjoy when there’s thought out reasoning behind points.


  • For something like Lemmy I’m confident it would just fall over (or require a much higher hosting burden). There’s way too much data to render and retrieve in a system like Lemmy, the caching systems for JSON shuck (hello jbuilder caching objects instead of json)

    Well, it seems to work well enough for Mastodon. I’d also point out that there are websites far larger than Lemmy using Rails at scale (Shopify and GitHub being the primary examples). It scales quite well.

    Ruby performance is awful

    Without benchmarks, this is a subjective statement. Ruby 3 is quite speedy now, at least I find it to be. Performance is even better with YJIT enabled in Ruby 3.2. I think this “Ruby is slow!” stereotype is left over from before Ruby 1.9 when YARV was introduced. Is it as fast as a native language? No and it never will be, nor will any other interpreted language. But this idea that Ruby is somehow the slowest possible interpreted language has not been true for a very long time now.

    there’s no mitigating factor to allow efficient blocking on IO bound requests (like coroutines or fibers)

    I’m not entirely sure what you mean by this, but Ruby introduced fibers a while ago.

    Ruby used a non-compacting garbage collector so it’s subject to heap fragmentation and wasting memory

    Not true anymore. Ruby has had a compacting GC for a while now. This was a difficult problem to solve because of Ruby’s support for native extensions. Otherwise it would have been done much sooner.

    there’s no static typing (or even type hinting),

    You can use RBS (built into Ruby) or Sorbet (third-party Shopify project) for this if you want. Or don’t, I personally prefer Ruby’s duck typing. I don’t think a language using someone’s preferred type system makes it “terrible” just because it’s not what someone likes. Other people are perfectly happy with it.

    the Ruby ecosystem is built on Rails alone at this point (few if any libraries to make use of)

    Ruby being a one-stop-shop for Rails has been a criticism of it for years. I’m not sure how that’s a knock against Rails or Ruby though. I personally write all sorts of non-Rails things with Ruby as I love the syntax and greatly enjoy writing Ruby code over that of, say, Python. To each their own though. There’s Sinatra, Jekyll, Fluentd, Chef, etc. all written in Ruby.

    the principle of “developer happiness” results in the need for tools like Rubocop to “resolve” invented problems WRT “how do you style X in a particular context” (among other things),

    I personally love the configurability that Rubocop provides. Some people like the “one true way” of formatting for languages like Go (which also for some reason thinks single letter variable names everywhere is a great idea), but other linters like Eslint for JavaScript have the same level of configurability as Rubocop. Alternatively, just don’t use them. Rubocop is not something you need to use to use Rails.

    and to top it off the framework makes doing the wrong thing easy and the right thing harder (Rails apps are so prone to N + 1 database queries).

    Drop in gem that will automatically solve 99% of N+1 issues: https://github.com/clio/jit_preloader

    It’s also a ridiculously hard thing to hire for because basically nobody teaches Ruby or Rails. There’s a very limited pool of Rails experts.

    Again, subjective statement here. My company has no problem hiring Rails devs. Granted, we operate on the idea that any good engineer can get up to speed with a framework in a reasonable amount of time. I don’t believe in the “you are only worth the frameworks that you know” idea. Give me three months and I’m confident I could be proficient & competent with any web framework. Not a true expert per se, but knowledgeable enough to get stuff done, which at the end of the day is what you need to do. Those are the people I want to hire. Not the person that’s going to be afraid to jump into something new because they’ve never worked with it before.

    Am I saying that Ruby/Rails is perfect and there’s no problems? Of course not. There’s no such thing as a perfect language or framework. But I also think that Ruby is unfairly demonized because of lack of familiarity and it being less used than JS and Python frameworks. And oh boy do I have complaints about JS frameworks. But I wouldn’t go so far as to call any of them “terrible.” Maybe it’s not my/your cup of tea and that’s okay.


  • Yeah I’m not sold on Hotwire either. I started a new Rails project last year with Rails 7 and removed all of the Turbo/Hotwire stuff and did it all with import-maps and vanilla JS. Import-maps don’t require a third party CDN though. I absolutely love that I can use them to write ES6 JS and have it served directly to the frontend without any Webpack/ESbuild compilation step in between. After a decade of working with the nightmare that was Webpack & Webpacker in Rails I’m totally with you on how that whole asset management system needed a big overhaul and I think with importmaps or esbuild we might finally have something tolerable.


  • To each their own. I don’t fanboy frameworks, they all have their pros and cons. What you specialize in for a personal professional career is different from what you may choose for a free software project though. Plus, I’d argue there’s definitely downsides to the JS ecosystem as well but also frameworks you know should not dictate your career prospects. I get this all the time in interviews and career development talks. If you consider yourself a web developer getting up to speed with a new stack or framework shouldn’t be an insurmountable task. The nature of web development is that it’s constantly changing. Feeling stuck with Rails vs. Django vs. React or whatever else means your skills are not keeping up with the market; it’s not a fault of the framework. The only constant in this line of work is change.

    That said, Rails isn’t going anywhere. JS frameworks are the hot thing (for whatever reason, I despise them for all sorts of reasons, but that’s not the point) for many new companies/projects, but there are very large companies whose products are built on Rails: Shopify, GitHub, GitLab, Zendesk, etc.

    There’s too much radical changes. First from sprockets to webpacker and then import-maps and propshaft. And then the in-built Hotwire is so hard to grasp.

    Would this not be viewed as adapting and keeping up with the trends? Webpack is terrible, but that’s what the JS world went with so Rails adopted it. Now there’s ESbuild, import-maps, and Hotwire. Rails supports all of them (import-maps, by the way, is a web standard, not a Rails specific thing… and I love using it). You don’t need to use them and can pick which works best for your product/project. That’s a benefit in my opinion.

    I also used my Rails knowledge to contribute to GitLab because I was misinformed that open source contribution would increase my prospective of getting hired. I contributed for around six months, got rejected multiple times, and then stopped all contributions to GitLab.

    GitLab certainly has that reputation. I don’t see how that’s a knock against Rails though. Shitty companies will be shitty companies regardless of what stack they use. Personally, I never contribute any code to projects that have a commercial organization behind them. If it’s not GPL licensed (or similar) you’re probably getting screwed by spending your time working on it.


  • foo@withachanceof.comtoProgramming@programming.dev*Permanently Deleted*
    link
    fedilink
    arrow-up
    19
    arrow-down
    8
    ·
    edit-2
    1 year ago

    Rails. Of course, I’m biased because it’s what I know the best, but also because Mastodon is written with Rails so in terms of getting more contributors from a similar project I think Rails would have been a good choice.

    I also looked into helping with Lemmy development, but ran into the same problem you’ve described: I don’t know anything about any parts of the stack. I run my own instance so I can run and debug it well enough, but actively working on new features/bug fixes would require more time to get up to speed than I can put in currently.

    Edit: I’m not one to complain about imaginary internet downvotes, but can we be better than reddit please? Downvote is not a disagree button. The question was what would I have chosen, not what the most popular web framework is this year. It’s cool if you would have chosen something else. This whole thread has become “what framework does everyone like the most currently?”



  • Is it not generating HTML on the server to be served to the client? What you’re describing is, in my opinion, an overly complicated form of dynamically rendering HTML on the backend. It’s exactly what I’m talking about: the layers and layers of complexity modern web development has added hasn’t really solved any problems but rather primarily created problems which are solved with another layer on top as a fix which has problems of its own, and repeat.

    Anyway, that’s my opinion on the matter, I’ve toiled with modern web development tools my fair share and time and time again found that removing all of them in favor of vanilla JS where strictly needed and traditional dynamic backends is the most reliable and performant, and frankly enjoyable form of web development. I know others like those workflows and the complexity/power they bring and that’s fine, it’s not my cup of tea though.


  • The mere existence of the term “server-side rendering” illustrates this well. I remember the first time I read about that concept and immediately thought “you mean the way we’ve been writing websites since the 90s?”

    Maybe I’m just out of date, but IMO web development has completely lost its way. I don’t do much frontend work anymore, but when I do my goals are always to see how few JS libraries I need to use and how little JS I need to write in general. The end result of that plus doing all/most work on the backend, sticking to standard HTTP conventions, and using only vanilla JS means super fast and performant websites with fewer bugs, less constant deprecations to keep up with, less security vulnerabilities in all the JS libraries, and no constant headaches from a complex Webpack-style build system for assets. It’s actually quite enjoyable when you remove all the bs of modern JS frameworks from your workflows.



  • I get it if the goal is to explore ideas, but any serious proposal that starts with “get rid of TCP/IP” isn’t a serious proposal because that stipulation alone makes it dead on arrival. Unless you could convince major internet backbone providers to adopt a complete replacement because of fantastically convincing reasons, dropping TCP/IP simply isn’t going to happen. Case in point: we’ve had a pretty damn good reason to migrate from IPv4 to IPv6 for decades now and we all know how well that’s going.