hacker news with inline top comments    .. more ..    13 Sep 2016 Ask
home   ask   best   3 years ago   
Ask HN: Strange bug workarounds?
86 points by porjo  11 ago   65 comments top 35
mbrock 7 ago 1 reply      
I worked on health record software. An elusive bug in the custom SQL Server crypto plugin led to very occasional corrupted entries, which was very bad.

The guy who wrote the crypto plugin had of course quit and nobody knew how it worked.

Fine-combing the C++, I found an off-by-one error that would cause the predicted failures: after rebooting SQL Server, the first entry would get encrypted with a zero key. (Hooray, we could now also fix all the corrupted data.)

For various reasons it would have been difficult to ship new DLLs to the affected customers. Only a handful used this particular crypto and it would be much easier to patch the existing binary DLLs on their servers.

Well... looking at the machine code, I found that the troublesome off-by-one operations were actually in the printable ASCII range... so I just taught my friend in tech support to do a particular obscure search and replace in Notepad++, something like changing ",}" into ",~" in the binary DLL... and then hot-reload it with an SQL Server command... worked perfectly.

throwaway_yy2Di 7 ago 1 reply      
Not my workaround:



This was an extremely serious bug in NASA/ESA's Cassini-Huygens probe, in the S-band link between Huygens (landing on Saturn's moon Titan) and Cassini (acting as radio relay).

It was a timing bug. There'd be a very high relative velocity between Cassini and Huygens, creating a significant (~2e-5) Doppler shift in the link. This shifted the frequency of the 2 GHz carrier (by 38 kHz). Likewise, it shifted the symbol rate of the 16 kbps bit stream (by 0.3 bps). The second effect was overlooked. On the demodulating end (Cassini), the bit-synchronizer expected the nominal bit rate, not the Doppler-shifted bit rate. Since its bandwidth was narrower than the 0.3 bps Doppler shift, it was unable to recognize frame syncs; this was proven in experiments post-launch. The parameter that set the bitrate was stored in non-modifiable firmware.

As it was when launched, Huygens would be unable to return any instrument data. For some context, this was the only probe that's ever visited Titan, at a cost of about $400 million.

The workaround


The workaround was a major change in the orbit trajectory of Cassini (a $3 billion probe). Details aside, it set up an orbit geometry with this feature: at the time Huygens was descending in Titan's atmosphere, Cassini would be flying at a ~90 angle to their separation. The relative velocity was still 20,000 kph, but tangential velocity doesn't contribute to Doppler shift.

dlinder 5 ago 1 reply      
I worked on a social news product and part of our look was to have an icon for every story - either an image pulled from the page, a user-uploaded image, or, in the case of Flash content (say, a video player), a screen capture.

We had it all up and running - loading the content, waiting for the player to initialize, taking the snapshot, generated sizes - on a windows machine when, one day, the request came in to migrate that machine to a VM. After the migration, things were fine - until we disconnected RDP. Snapshots were coming back at the right size, but totally white.

The eventual "solution" was a laptop in the engineering area RDP'ed into this VM to keep the snapshots from going white. It got unplugged one holiday weekend, earning it a red hand-sharpied sign - "PRODUCTION LAPTOP: DO NOT UNPLUG". It was unplugged again one fateful weekend, this time prompting a healthcheck to be written that looked for all-white images in its output.

That rig ran that way, I believe, until someone had the insight to make a second VM, this one RDP'ed into the first.

Turtles, all the way down!

frereubu 8 ago 2 replies      
Not so much a software bug, but back in my early days (late 1990s) supporting an office network in London there was a computer where the mouse was making the cursor behave erratically during roughly the same period every afternoon. We swapped out the mouse, the controller card, even the computer - effectively replacing all the physical equipment - and nothing seemed to stop it. We went through all sorts of ideas - too near the microwave, heavy fax machine usage, someone's mobile phone - until we realised that it was optical mouse, and the sun would shine through that window each afternoon at the same time and screw up the sensor in the mouse. We stuck a bit of cardboard to the side of the desk and it never happened again.
kogir 2 ago 1 reply      
The Motorola iDEN [1] series of phones were pretty sweet back in their day and had a JVM you could actually write and deploy apps on.

I worked on Loopt, an early mobile location sharing app, and we talked to our server over HTTPS. Things were working great on a few LG and Sanyo phones, and worked fine in the iDEN emulator, but POSTs would fail consistently on the device itself. GETs worked fine.

After watching traffic on the server for a bit, I noticed the POST requests all advertised HTTP/1.1 and sent the Expect: 100-Continue header. On a whim I configured the server to treat all incoming connections as HTTP/1.0 so it would never send the 100 (Continue) response [2].

It worked!

Or did it? Turns out the iDEN phones were now happy, but the other phones were not and would refuse to send POST bodies if they didn't receive the 100 (Continue).

This well and truly sucked, and we thought for a bit we'd need to have two different endpoints with different configurations to support the differently incompatible phones. Lame.

But then I remembered the format of an HTTP request:

 POST /path HTTP/1.1\r\n Expect: 100-Continue\r\n [Header: Value]\r\n \r\n [Body]
What if I supplied a malformed URL? Something like "/path HTTP/1.0\r\nX-iDEN-Ignore:"? Then, if there's no validation or encoding, the request will look like this:

 POST /path HTTP/1.0\r\n X-iDen-Ignore: HTTP/1.1\r\n Expect: 100-Continue\r\n [Header: Value]\r\n \r\n [Body]
Turns out that worked. The JVM was never updated or fixed, the hack shipped, and it worked consistently for the lifetime of those phones.

[1] https://en.wikipedia.org/wiki/IDEN

[2] "An origin server ... MUST NOT send a 100 (Continue) response if such a request comes from an HTTP/1.0 (or earlier) client" https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8....

mjg59 9 ago 1 reply      
Samsung laptops would fail to boot if the UEFI variable store was 100% full. The original solution to this in Linux was to leave at least 5K of free space. However, on several systems, removing UEFI variables didn't actually free up space - it was marked as free internally, but the reported amount of free space didn't increase, and so Linux would refuse to allow you to create new variables. The "solution" was to attempt to create a variable larger than the available free space, which forced the firmware to trigger a garbage collection run and re-synchronise the internal and external views of the amount of available free space. Doing something that we knew would fail was a requirement for avoiding killing laptops.
romanhn 2 ago 0 replies      
Many years back, I was working on a web application that, among other things, could generate PDF user reports. These reports were generated from HTML web pages using a third-party library. Normally this worked well (as well as such a tool could be expected to work anyways), however once a month or so the fonts on the reports would come out super tiny. This would then happen in random reports until we rebooted all of the app servers. The bug occurred in production only, never in our dev, staging or QA environments.

Many hours of investigations were committed, many emails to the vendor were written, much hair was torn out. No luck whatsoever. Months passed, and the bug reoccurred at random intervals and did not consistently affect all reports. One day I logged in remotely to one of the Windows app boxes as an admin/console user and was annoyed to once again discover that it forced my screen resolution to change. That's when I had an epiphany and 10 minutes later was able to reproduce the bug in my local environment.

Turns out the third-party library had some funky rasterization logic that took into account both the resolution of the machine when the library/service was started as well as the current resolution, pretty much expecting both to be the same. Logging in remotely as a console user has the behavior of taking on the resolution of my local machine, which was always higher than what the remote box ran at. Another thing to note is that the console user logged into the same running instance of Windows that was generating the PDFs. BAM! The cached value used by the library no longer matched the runtime resolution and the reports now generated screwy tiny fonts. This happened rarely because logging in as admin/console was not the recommended approach, and it was inconsistent because we had multiple app boxes and the other ones continued to work OK.

Solution - disallow admin/console remote logins. This was one of the most obscure bugs I have had the pleasure of solving.

tominous 10 ago 2 replies      
I worked on an HSM system (hybrid disk/tape archival) which suddenly started having lots of I/O errors writing to tape. We tried new media. We tried new drives. We double-checked cables and SFPs. No luck.

Finally we tracked down the issue: when the contents of a particular file were archived to tape, the tape drive crashed. I suspect it was a tape firmware issue, maybe to do with the native compression.

The workaround was to mark that particular file as "not to be archived" and we stopped having media and drive errors.

josu 4 ago 0 replies      
My favorite:

>Wing Commander was originally titled Squadron and later renamed Wingleader. As development for Wing Commander came to a close, the EMM386 memory manager the game used would give an exception when the user exited the game. It would print out a message similar to "EMM386 Memory manager error..." with additional information. The team could not isolate and fix the error and they needed to ship it as soon as possible.

>As a work-around, one of the game's programmers, Ken Demarest III, hex-edited the memory manager so it displayed a different message. Instead of the error message, it printed "Thank you for playing Wing Commander."However, due to a different bug the game went through another revision and the bug was fixed, meaning this hack did not ship with the final release.


rincebrain 3 ago 1 reply      
A recent encounter was a fix for playing the original BioShock under Windows 7 - the sound would not function more than for the first intro. The trivial fix is to plug in something to the microphone port. [1]

Another good one - back around the era of the original NVIDIA Ion boards, I was helping to run a cluster of these boards as an experiment in low-power computing. [2]

Some ran Linux, some ran Windows. Running CUDA code under Linux headless is fine, running it under Windows with a non-Tesla GPU was nontrivial at best (and involved hacking up the Tesla variant of the driver to add some PCI IDs). Unfortunately, it turns out that this breaks if you don't have an actual display attached to the machine.

The solution that was implemented was to take 36 naked male VGA headers and solder resistors across just enough pins to convince the system that there was a display there, and then install them.

Or the Samsung SMART IDENTIFY hard drive bug - which meant that the advice "disable SMART to keep your data safe" was sometimes valid. (The drives had a FW bug that caused them to drop data in the write cache if they got a SMART command before flushing it.) [3]

I'm sure I'll think of more later.

[1] - http://forums.steampowered.com/forums/showthread.php?t=10931...

[2] - http://www.nvidia.com/content/gtc/documents/sc09_szalay.pdf

[3] - https://www.smartmontools.org/wiki/SamsungF4EGBadBlocks

cperciva 5 ago 0 replies      
Grepping my checked-out source trees quickly:

1. spiped re-binds SIGINT if it is launched as pid 1, in order to work around a Docker bug: https://github.com/Tarsnap/spiped/blob/master/spiped/main.c#...

2. In my POSIX-violation-workarounds script, ironically enough, I work around a bug in bash which makes 'command -p sh' run with the incorrect path (this has since been fixed, but continues to be present in older installed versions of bash): https://github.com/Tarsnap/spiped/commit/e3968941c9c1b20c63d...

3. In my getopt code, I use a (non-C99-compliant) computed goto in order to work around a bug in LLVM's handling of sigsetjmp/siglongjmp: https://github.com/Tarsnap/libcperciva/commit/92e666e59503de...

4. Many years ago, I added a spurious 'volatile' into some Tarsnap code in order to prevent a buggy LLVM optimization step from running (it was making the Tarsnap build hang on on OS X 10.7): https://github.com/Tarsnap/tarsnap/blob/master/tar/multitape...

cesarb 2 ago 0 replies      
At a previous company, we had a legacy software written in PowerBuilder, which crashed on some of the client's computers. We couldn't reproduce the crash on our computers, no matter how much we tried.

We finally got access to one of the crashing laptops, and (with the client's permission) installed a debugger on it. After a few false starts, we found that some code deep within PowerBuilder's framework crashed when it received a particular accessibility window message, and that this window message was being sent by some Microsoft touch screen component. All of us techies had avoided buying touch screen laptops (this was when touch screen laptops were Microsoft's latest fad), which is why it had never happened on any of our machines.

The solution was to do a binary edit of the import table of the relevant PowerBuilder DLL to route all Windows calls to a helper DLL, which forwarded them to the real Windows DLL after replacing the window message callback with a small thunk. Said thunk then filtered out the offending window messages, before forwarding the rest back to the real window message callback within the PowerBuilder DLL. Hacky, but worked perfectly.

nathanielc 6 ago 0 replies      
Several years ago and I don't remember much of the specifics but we had an issue with static content being served from our site being randomly truncated (polluting the cache etc).

We eventually traced the issue down to the Nginx server that was serving the files and one of it's cache buffer size config options, (I don't remember which one anymore). We noticed if the file being served was larger than a certain size it would occasionally truncate the file but not always. We tested increasing the buffer size by repeatedly doubling the default value, which was a power of two, up to a size of several GBs. But the files kept being truncated for some small percentage of the requests. At this point we knew it wasn't directly related to the size of the buffer since it was larger than any files being served. Finally someone suggested that we test a value that wasn't a power of two and the issue was gone.

We figured it was an internal bug in Nginx where it was growing an allocation buffer and used powers of two, but had an off by one error that didn't copy the second half of the buffer or something. We dug through the code but never found anything and so we left the cache setting at +1 from the default power of two value and never had an issue again.

MaulingMonkey 8 ago 0 replies      
Wireshark let me find out that Unity's WWW class ignored request HTTP headers on iOS, causing our usage of S3 to fail. I worked around the problem by switching to URI based authentication.

On-screen keyboards displayed Chinese after visiting a system menu. We freed the async operation when the system menu "canceled" the keyboard operation (it wasn't supposed to be even displaying), but apparently the system had a use-after-free bug. I worked around the problem by switching to a 4 entry LRU allocator, keeping the past 3 or 4 canceled operations around untouched (1 would've probably sufficed, but I'm paranoid.)

A WinRT API to check internet connectivity would exit(3) our app without error messages or related callstacks - but only if the Charm bar was open for more than 10 seconds, assuming you called it once per frame on the main thread. I had to bisect our history to figure that one out - and repro in a new test app to confirm it was the real cause.

EDIT: Third party injected DLLs crashed our app at least twice - once for some monitoring software on a coworker's computer (crashed when closing file handles as build tools tried to clean up and exit), once for an old Microsoft Word IME that predated the Win8 app sandbox who's restrictions it was violating. The monitoring software was uninstalled, the IME I couldn't think of a reasonable workaround for and left to Microsoft to fix.

web007 4 ago 0 replies      
The garret: glen; CSS bug, circa 2006 or 2007.

Starting out with a bunch of existing CSS, a developer added 2 new properties somewhere in the middle, but forgot a trailing semi between them. Reloading the page showed the first change, but not the second. He tried ten different variants of the second property name, spelling, values, etc. and nothing was showing up. He added another property before the broken one to help debug, and it started working. He then tried several variants on that to see if it was some arcane ordering bug, and eventually ruled that out by using two developers' names for property:value.

Because all of the intermediary versions included a semi, and because the first property allowed some kind of extended content that was ignored, it took half a dozen developers looking at the "weird bug" before someone noticed the missing semi on the first property.

beamatronic 9 ago 0 replies      
I used to have a Commodore 64. I had one specific game that would not load successfully unless my monitor ( a TV actually ) was turned off. So I had to type "LOAD *,8,1" or whatever, then turn off the monitor, then press RETURN. I'd turn the monitor back on after the disk drive lights went off.
skissane 1 ago 0 replies      
Many years ago, one place I worked at had the following setup: a closed source application would generate a CSV file, which was then FTPed to another server, where a Perl script translated from CSV to fixed-column-width format (which happened to be identical to the output format of an old mainframe application that we'd migrated off), and then the fixed-column-width file was FTPed to yet another server which loaded it into a database. Now, the CSV file had a number of fields - name, address, etc; but it also had an encrypted password field. We didn't use the encrypted password for anything, we didn't even know what format it was in (hashed or reversibly encrypted or so on). The CSV format was fixed by the vendor and we couldn't change it. However, rather than being output in Hex or Base64 or similar, the closed source app just put the binary data of the encrypted password into the CSV file, which would randomly contain comma or new line characters. The author of the Perl script wasn't aware of this possibility, so the Perl script would die, complaining it had got an invalid input line (wrong number of fields), whenever that randomly happened (sometimes several days in a row, other times it could go weeks without happening).

I proposed to modify the Perl script to fix this issue. However, management refused to let anyone modify the Perl script. The guy who wrote it was a contractor who had moved on years ago. This Rube Goldberg file conversion and transfer formed part of a critical business process. A couple of years earlier it had failed, and its failure resulted in bad press and reputational damage. So they were way too scared to let anyone modify the code of the Perl script.

Instead what happened, was each day a person would manually check if the script had run successfully the previous night. If it did, they'd fix up the data issue in the input CSV file using a text editor then manually start the Perl script again. Management agreed that we could automate that checking process, and if the Perl script failed they would get an alert on our service availability dashboard. But no way would they let anyone fix the bug in the Perl script.

nevir 6 ago 0 replies      
Found deep in the guts of some shared library at Amazon (many years ago; probably still exists):

 #define private public; #include "something"; #define private private;
(Not to fix a bug, but certainly a hacktastic workaround)

williamjackson 7 ago 0 replies      
There was a security camera with a built-in HTTP server at a previous job. The built-in server would respond without a problem when viewed from one computer, but would force close the connection without a response when viewed from another computer.

I used Fiddler to compare the requests from the two computers and eventually discovered that the request would fail if the `Accept` header was longer than some value (might have been 255 characters -- I don't remember).

Turns out when you install Microsoft Visio and Project, Internet Explorer's Accept header gets really long.

lscharen 2 ago 0 replies      
Not a "real" problem on a running system, but back in my first year of undergrad I had a computer science assignment that kept faulting with an "Illegal instruction" error on our Solaris systems.

I had a C compiler on my personal computer and the same program ran and compiled fine there, but we had to submit our solution in source code form on the Department's shared system to plug into the class' automated build and test scripts.

Eventually, I discovered that adding an extra space to a comment fixed the error. I wasn't experienced enough to at the time to know how to use GDB to disassemble and debug binaries, but, looking back, I think I must have triggered a compiler bug that misaligned an instruction (Sparcs were 4-byte aligned, IIRC) and adding the extra space somehow fixed the alignment of the generated code.

aruggirello 6 ago 0 replies      
My "favourite" bug workaround is for the KDE Plasma 5 desktop wallpaper changer which degrades the pictures being used (by blurring, almost ruining) whenever downscaling them (when they are larger than the desktop's native resolution), something lots and lots of KDE users are complaining about. There is no fix released yet but, being a creative user, I resorted to installing "variety", a very cool desktop wallpaper changer (and downloader).

As Variety can apply ImageMagick filters on the fly to the wallpaper being set, I set it up so that it just scaled down and cropped the image to my exact desktop resolution. This fixed the issue for me... at least, temporarily :)

To set up the filter, I edited the ~/.config/variety/variety.conf, and changed the line:

 filter1 = ...

 filter1 = True|Keep original|-scale '<my desktop resolution, eg. 1920x1080>^' -gravity center -extent <my desktop resolution, eg. 1920x1080>
Then I configured Variety to generate a single wallpaper file in a folder which is "watched" by the KDE Plasma desktop wallpaper changer, with the same interval. Voil!

existencebox 4 ago 1 reply      
Christ, I should be keeping a list over the course of my career, I'm sure I've forgotten some gems.

Some that stand out:We had a NOSQL-esque backend that stored CSVs, as part of a data pipeline. (CSV in, data "Activity", csv out). You specified the file, if it had headers, separator, etc. As it turns out, you could not define a null separator, if you wanted to have a single column file. I needed something that would properly split what I knew to be well formed all alpha-numeric inputs within the valid ascii range, and would avoid spurious splits. The sep I used was naturally (the snowman unicode character, unicodesnowmanforyou.com, which as it turns out HN sanitizes on posting!) (The punchline comes when I started seeing this pattern show up in production code elsewhere in the company, using this exact same character choice.) Snowman separated files++ (.ssv?)

Another fun bug, was working in a very large platform that had a common telemetry library that used perf counters. The original authors, and all of the platform authors consuming the lib, had gone on their merry way without realizing that perf counter instances have a disallowed character set, which the custom lib was _embedding by default_ when it added metadata to the instance name (#foo or something IIRC). Fixing the metadata appendation was easy enough, but to fix every place where the consumers had named something with an invalid char (and then consumed with the same invalid char on the read side) ended up writing a shim that sat between the perf counter lib and world and silently character replaced the invalid chars with something strange like _<charID> (Basically reinvented the wheel of slash escaping but within the perf counter allowed charset).

And to end on an abysmal note, large project had VERY consistent naming scheme, had gotten quite deep filewise, was hitting max path len limitations on windows. Rather than break the consistent naming on a new, slightly longer file that needed to be added, or rename everything else, changed root paths from Workspace->w; Main->m; Release->r, etc. I am not proud of this one...

Even as I type this I know there are tons of hacks I'm forgetting (using plastic knives as hard drive stabilizers in a significantly sized datacenter deployment) and will gladly expound if there's interest but for now I'll let this nostalgia get reburied :)

willvarfar 8 ago 1 reply      
Brings to mind this absolutely classic old story:


And pics of a build it inspired:


atom_enger 4 ago 0 replies      
I remember working as a help desk tech and our company used ACT the CRM software. At the time it was very poorly designed(might still be) and used an MSSQL database to store all of it's information. We wanted to port all of the information in the DB to a web app that would allow us to do different stuff with the data that ACT wouldn't allow us to do(number crunch, send email reports, etc). Part of the problem was that an ACT install automated the MSSQL part of the set up and set the root(i forget what they call it in mssql now) with a password so you couldn't see any of the internal tables. I remember spending that night after everyone went home learning how to shut down the database and force a reset on the root user so that we could add a user that could get read access on all the tables.

Everyone had been talking about getting at that data for a year or so and one night I was just like fuck it, I'll give it my best shot. Honestly it wasn't that impressive, but I certainly do remember how cool it felt to tell "the man" to F off and this was our data :).

ivank 8 ago 1 reply      
I've got Intel graphics and a 4K monitor on Linux. With the Intel drivers, I have no vsync (I can't use TearFree because of strange video corruption issues), but things mostly run correctly. With modesetting drivers, I have triangular tearing and serious performance issues in Sublime Text, but _do_ have vsync in fullscreen.

My workaround for watching movies with vsync? Use Intel drivers in my main X session, modesetting in a secondary X session just for mpv.

hga 8 ago 2 replies      
Search for SimCity in this item: http://www.joelonsoftware.com/articles/APIWar.html

It's kinda strange for an OS to be maintained for a long time with that style of backwards compatibility....

cakes 5 ago 0 replies      
The best/closest I have is that where I once worked, we had a NetApp that allowed it to be upgraded to a version that it didn't support (it wouldn't boot) which was not how it was supposed to be... Anyway, we should've been able to fallback but the jump we tried to make screwed with paths to the bootstrapping/startup and while normally the previous version should be recoverable...well it was not because of where the upgrade process failed.

So we were trying to recover it and I had a "It's a Unix System, I know This!"-moment and was able to manually type in the path to the previous binary during an emergency/rescue prompt (based on deductions from forums, the current failed loading message, and some obvious things like architecture) and got it up and going again.

Documented that, internally, to the best of my ability.

danbruc 5 ago 0 replies      
My favorite is not a bug workaround but for a limitation in the GUI library used.

I worked on an enterprise job scheduler that was initially outsourced to an Indian company but the project started failing and so we took back development. The software was required to be able to schedule tasks with a delay of up to a hundred or so hours but the GUI library only had a control for time of day up to 24 hours. The code we received had an interesting solution - they changed the format string to place the milliseconds part first and then some code in the data access layer that swapped hours and milliseconds back and forth on reads and writes. And there you have it, delays up to 999 hours.

mirkules 7 ago 0 replies      
Most recent one is a bug in lubuntu based on 16.04 where the mouse cursor disappears after system goes to sleep (but is still functional).

Workaround is ctrl-alt-f7 to switch to console then ctrl-alt-f1 to switch back to GUI, and the mouse cursor reappears.


Another one is a sweet widget in OS X called iStatPro, which was no longer working ias of Mountain Lion. But, there is this workaround which for me still works on El Capitan: http://hints.binaryage.com/istat-pro-for-mountain-lion/

gwbas1c 8 ago 1 reply      
Windows only allows a limited number of Explorer icon overlays installed. If you install a lot of programs that install Windows icon overlays, some stop working.

There are ways, though, to make sure that your icons have priority over "Joe's poorly designed explorer plugin." :)

sethammons 2 ago 0 replies      
Not really a bug, but I just ran into this. A linter for Ruby that only wants double quotes if there is string interpolation and prevents builds from triggering. Never mind if you want to avoid escaping single quotes for readability. Here is a work around ;)

 fuck_linters = '' linted_string = "${fuck_linters}don't stop apostrophes"

sethammons 2 ago 0 replies      
Not mine, but a classic. Emails that can only be sent 500 miles:http://www.ibiblio.org/harris/500milemail.html
slm_HN 4 ago 0 replies      
This is a little different, but I always think about it when someone says bug workarounds. It's literally a bug workaround from an unknown coder back in the days of BASIC...

 390 ...some basic code here... 395 GOTO 405 400 REN HOUSEKEEPING 405 ... more basic code...

mdip 2 ago 0 replies      
This isn't a software bug, but since a lot of these aren't, I thought I'd share because it was a fun one with an unexpected cause.

I worked on a floor with about 10 people that was entirely occupied by phone switch equipment (raised floor, wires/racks, Halon fire suppression and big enough to seat several hundred people were it not for the equipment). For two weeks, about every 3 days or so in the middle of the night, the power would cut off. This was particularly surprising since the entire floor had dedicated battery and diesel backup (regularly checked/tested) and they never kicked on. Our facilities guy was going bald troubleshooting it -- brought in electricians and had the techs checking everything. There was just no explanation.

In a last ditch effort to try to get some information, he setup a laptop with a built in webcam and placed it high enough in the air so as to get most of the site[0].

A little history is necessary for the facility's design to make sense. At one point this room was used for our mainframe -- we were a local phone company and had a ton of data. This necessitated having a very elaborate near-line storage device custom built for the company. It consisted of a multi-million dollar robot (the exact kind you see on commercials building CARS, an arm about the size of an adult man coming out of the floor which ran on a track from one wall to about the middle of the space). It was enclosed in glass and would move tapes from a large shelving unit into drives and back but it was an open loop system: it never truly knew if it got a tape or if the tape made it to the drive and back and being an imperfect mechanical device, every once in a while it dropped a tape and someone would have to disable it, go in and pick the tape up off the floor (or, more often, the pieces of what was once a tape in some cases). This robot moved very fast and was very powerful so in a scenario where it's a person vs. "big moving robot"... well, there'd be pieces of person on the floor instead of tape. Since we liked our employees (and OSHA probably mandated it), the interior of the robot housing was filled with exposed "big red buttons" that would cut the power in an emergency. The exterior walls of the switch room had the same switches, though these buttons had a large acrylic cover with a hole in it so that you couldn't accidentally power down anything. A choice few of these killed power to the entire site and had a sign indicating that with something along the lines of "OH PLEASE GOD DON'T TOUCH THIS BUTTON"

Janitorial staff had been used to turning the lights out on their way out if they were left on and a new member of janitorial staff discovered, at some point, that hitting that big red button took care of all of the lights at once (along with all of the normally blinking LEDs on the thousands of switch cards, but hey -- it got dark at least!). So on his way out the door, he'd walk over to it, look at it for a second, then push it ... powering down ... everything.

The workaround was easy. We were now responsible for taking care of our garbage, dusting and cleaning from that point forward (which I think during my 7 or so years on that floor happened once) and a permanent camera was installed in the ceiling which was powered on a circuit not affected by the buttons. The buttons remained, though.

[0] I think after ruling out everything else he had suspected sabotage of some kind was responsible. Our doors used RFID badges and visitor logs were accessible, but at that time the doors that were interior to our office space didn't require badge access and there were no entries for the doors that one would have checked.

mdip 3 ago 0 replies      
The most painful bug I encountered had to do with a visitor access kiosk I had designed and written the software for at my previous company. The workaround was to block access to a set of sites for the entire company to keep the two kiosks from failing.

About every few months the web cam would just ... randomly stop working. This would cause the kiosk application to crash while attempting to take a visitor badge photo of the visitor, rebooting the machine. Because of the nature of the device[0], it was very difficult to identify the root cause and the fix was to physically visit the kiosk, unplug the web cam, remove the driver, install the latest driver and plug it back in. Eventually, I took some time and set-up one in my office and watched it.

Something odd about the web cam was that the driver would never work if the web cam was plugged in while the driver installation ran. The installer instructed clearly, on a separate page of the installer to unplug the camera before "proceeding" and in what I have come to believe is one of the dumbest designs for driver software, it would periodically look for updates over the internet and silently install them, yielding a completely broken web cam. I spent about a month's time diagnosing the problem, mainly because that wasn't where I expected it to be, since I had other, more likely targets[1] (and I hadn't handled the OS install/driver setup).

To make matters more entertaining, the guy who maintained the hardware had added the hostnames and IPs to hosts and configured it to resolve to but the driver service helpfully ignored that file (as far as I was told[2]) and turning on the corporate firewall (Symantec Endpoint Protection) caused blue screens. Since this driver started feeling a lot like fighting malware, we ended up attacking it as such and shut down all communication with the updates servers and IPs via the perimeter ... for the whole company[3].

[0] It was an Office Communications Server solution written in a very old API and the kiosk ran Windows XP, which we stripped of nearly everything and forced the device to use the kiosk application as its shell (which would boot itself if it encountered any problem).

[1] I had to write a component for the software to work with the web cam in C++, a language I hadn't touched in years, so my gut feeling was that it was related to that component.

[2] It could be that we missed some of the IP addresses it polled, or it could be that it just ignored the hosts file in windows. I didn't do this work so I'm not entirely sure.

[3] For whatever reason, security wouldn't/couldn't block the IPs just for the kiosk itself (something about it being setup to not require authentication to access the internet and our perimeter proxy server -- at the time -- being unable to be configured to block specific external IPs for specific internal IPs. My bet is that it was more a "not willing to" than an "unable to", but who knows?). The practical upshot is that we had some of these devices on peoples' desks within the company and they experienced the same problem so once it was banned, we received fewer help desk calls for broken web cams.

Ask HN: What is the best way to enter VC?
11 points by tomrod  3 ago   2 comments top 2
propter_hoc 54 ago 0 replies      
It's pretty straightforward to get an entry-level position at a firm. Analysts usually have a finance/business background with some tech industry exposure; these days, many firms also hire social media intern types. So if that's your situation, you have a fairly well-trod path.

Intermediate level positions (which are fairly uncommon) are often filled by promotion of analysts, the return of analysts after stints in MBA school, or the like.

For actual investment decision-making roles, the path isn't so obvious. The tricky part here is that VC (as with boutique investment firms in general) is a very "unique mix" driven industry. There are very few partners, whose "unique mix" of biographies are a critical part of the pitch that VCs make to their investors (LPs). Those LPs will be looking for firms made of a few amazingly accomplished, complementary individuals - and putting in 10 years of analyst/associate/principal work at boutique firms will generally not cut it for "partner" level.

If you want to be a partner at a firm, your honest best bet is to:1. start a tech company, raise VC, and achieve a successful exit; 2. make a few angel investments of your own and achieve a solid track record; and3. get recruited on the basis of 1. and 2.

(Also - These days some firms, notably a16z, are hiring subject-matter experts to serve in unique advisory roles. Your trajectory to get one of these roles is to ignore VC for most of your life and become a noted subject matter expert.)

catalinbraescu 1 ago 0 replies      
A secretary working for a VC firm and a GP are both part of the VC world.

Please make clear which part of the VC world you're targeting. The path to become a clerk at a VC firm is way different tha the path to become a GP there.

Ask HN: Do coding boot camps get people jobs/careers without a degree?
4 points by Onixelen  1 ago   2 comments top
prostoalex 1 ago 1 reply      
The only benefit I can see in comparison to self-learning is access to a human being that can answer most questions. Given most bootcamps' focus on specific stacks, I'd imagine they produce somewhat decent junior engineers (as long there's a stack match) but poor senior engineers.

The employability of certain stacks (Swift + iOS, Java + Android, Node) is very high at the moment, so immediate employment issues are likely well taken care of, but long-term career prospects are somewhat dubious - I mean, there's still market for stacks such as Visual Basic + SQL Server, or Perl, but it's not red-hot.

Ask HN: Is Apple about to kill the Macbooks?
17 points by rreyes1979  6 ago   34 comments top 17
rarepostinlurkr 9 ago 0 replies      
Just because they are pushing iPad Pro as replacements for full laptops doesn't mean people can realistically replace their daily workflows with iPads right now.

There is "Productivity" (Generic Office Productivity) and there there is Productivity (Making Industries Turn). No doubt they could have iPad Pro's do both, but by the time you've made the iPad Pro able to do Maya, Premiere Pro, Da Vinci Resolve etc, you've turned it into a desktop again.

They may very well try to do that, arguing the iPad Pro is a better platform that embodies the vision of how they'd like desktop computing to be, but that platform is years and years away.

Also worth realizing that Developers aren't the bulk of people using computers for "Productivity", our use case isn't the primary one. Not that I'd be happy if Apple decided to ignore it. That'd be really sad.

bdcravens 1 ago 0 replies      
> With no announcements in sight for new MBPs

Review the announcements at http://www.apple.com/pr/library/ - they often announce new Macs in their fall announcement, and generally never at the iPhone announcement.

In addition to various leaks of the new MBP chassis, there was recently a leak of upcoming trademarks (http://bgr.com/2016/09/07/iphone-7-iphone-7-plus-2016-macboo...) which included the MBP TouchBar.

guessmyname 3 ago 0 replies      
I have been trying to buy an Apple computer for a year now. I have had multiple issues that have blocked me from buying one, starting with the fact that there is no official Apple retailer in my country [1].

As Apple products are super-overpriced I think "Why not buy a computer with maxed specs?" this way I can counter the fact that I will have a discontinued computer in five years or so. Right now the rMBP 13" with maximum specifications (16GB RAM, 1TB Flash Drive, Core i7) costs around $2,700 + taxes, this is a lot of money but those specs are the minimum nowadays and I want to future-proof it, so I am kind of forced by my profession to buy it. Unfortunately, all shipping companies in my country have a limit of $2,000 per import so it is obvious that I cannot buy it online, I have to travel to the US.

Have you read /r/mac or /r/apple ? There is at least five posts every day of people complaining about issues with the keyboard, the display, the graphic card, the disk (mostly the disk utility reporting inaccurate information), and even the hinge. Most of these issues can be solved going to a "Genius Bar" and asking for a replacement. Cool, but I cannot do that in my country because there is no "Genius Bar". If I travel to the US to buy this over-priced computer and it comes with a defect I will have to come back to get a replacement; to prevent this I would need to stay in the US for a couple of weeks to check everything before going back to my country.

Another reason to buy the customized version, that way the money spent in flight tickets, hotel room, and local transportation will be worthy. I got the random number of $5,000 as my budget, and the devil knows I've been sitting on this money for several months waiting for Apple to release the goddamn redesign that they have been promising since last year.

[1] http://www.apple.com/retail/

bdwalter 5 ago 2 replies      
As a vi/vim addict, I'm more concerned about the future of the esc key...
taylodl 6 ago 0 replies      
There are certainly plenty of rumors around an imminent Macbook announcement and some of the expected features: http://www.businessinsider.com/apple-macbook-pro-2016-rumors...
tylerpachal 5 ago 2 replies      
I don't follow the Apple's product news too much, but I was really hoping for the announcement of a new Thunderbolt display now that they have discontinued the current generation (which had been around since 2011).
ggggtez 6 ago 1 reply      
No. Source: common sense.
cabbeer 5 ago 1 reply      
How would people make ipad apps?
mmagin 4 ago 0 replies      
They've been slow about releasing new Mac products, no doubt the much larger cash cow has been a distraction, but I think they'd have to do a huge amount to make the ipad something that would satisfy all their app developers.

I am not an iOS dev, but I would certainly want git, bash, and emacs. I can see how a lot of people might be accustomed to making image content in photoshop or whatever...

33degrees 4 ago 0 replies      
They're releasing a new version of MacOS next week, I would take that as a sign they're not discontinuing it any time soon...
angryasian 4 ago 0 replies      
There is a lot of overlap with macbook, macbook air and ipad pro. I don't see macbook pro's going anywhere.
wmf 6 ago 0 replies      
Rumors of October are in sight IMO.
kentor 4 ago 1 reply      
No. But if Apple replaces the keyboard with "butterfly" switches, like those on the MacBook, then the new MBPs might as well be DoA.
pasbesoin 2 ago 0 replies      
I've started wondering whether the delay is not only because 1) The current products have been considered "good enough" in the face of intermediate processing / power requirement changes in succeeding chip lines...

But also because 2) Apple is making the move away from Intel to their own customized ARM processor.

The rumor's been around, before. But really, why else not bump the processor and maybe some subsystems, if and in lieu of a more major redesign?

P.S. This is just rampant, uninformed speculation pulled from my posterior. And I've no information and limited confidence as to whether such a move could be made sufficiently performant. Still, why not a bump or two, in this intervening time?

gjolund 4 ago 1 reply      
I'll never buy another one, such a waste of money.
draw_down 5 ago 0 replies      
Ask HN: How can I become a proper Project Manager from a Programmer?
115 points by wener  20 ago   55 comments top 25
jwn 14 ago 1 reply      
I've recently gone from Developer to Technical Product Manager, and I believe the following traits are important:

1) Communication on both a technical and product level. This allows you to act as a bridge between sales/marketing/management and the developers. See #2

2) Speaking two languages: Code and Product. This is where being a former developer comes in quite handy, as you can only learn Code through writing it, but you can implicitly pick up the Product by thinking like a non-techie and paying attention to what they care about.

3) Keeping a focus on the big picture during a project duration. As a Product/project Manager, you need to understand timelines beyond 3-6 months and make sure you're not shooting yourself in the foot for later. This is tangential to what you may have read in the Pragmatic Programmer.

4) Product/Project Manager can be squishy terms, meaning that the responsibilities can vary by company. Often you'll be left to ensure all the ends of a project are wrapper up: testing, documentation, communication on releases, etc.

There are probably many more things, but those are off the top of my head. Good luck!

stuaxo 17 ago 4 replies      
The best project managers I've had have identified and removed obstacles for me (including things like - attending mandatory meetings, so the devs don't have to).

Other good managers have also reigned in my ideas enough so that we implement what is attainable.

Bad project managers have had an obsession with statistics, spreadsheets and tools like Jira.

Most project managers I've had have been bad/indifferent, but with about 2 or 3 out of around 16 roles/projects being good/great.

debacle 14 ago 3 replies      
99% of the time "Project Manager" means "Project Facilitator."

The key aspects of project management are gating, communicating up, and communicating down.

Gating: Keeping things that aren't The Project from becoming The Project without being properly defined (time, deliverables, budget, resources).

Communicating Up: Letting business owners and stakeholders know the status and cadence of the project, what the project team needs to get the job done, what ambiguities need to be cleared up, etc. It's very difficult to hold someone's who is generally your boss feet to the fire, but it's am important skill to learn.

Communicating Down: Deliverables, roadblocks, obligations, morale, etc.

The most important skill in a project manager is humility. Many PMs see themselves as captains of some giant see-faring vessel, but have no respect for the vessel or the sea.

impostervt 12 ago 4 replies      
You don't have to transition. Think hard before you do.

I became an engineering manager at around 26, and did it for another 5 years, and thought that was my future. But I transitioned jobs and ended up getting back into development, and realized a few things:

- I hate meetings, and PMs go to meetings. A lot.

- PMs have less control then you probably think.

- Writing code means I get to actually make stuff. At the end of the day, as a manger, it was often hard to point to anything as a real accomplishment.

I'm 37 now, and have no desire to go back to being a manager. Now, maybe being a PM is what you really want to do, and if so, I wish you the best of luck. We could use some PMs with actual development skills.

eclipse31 18 ago 1 reply      
I'm in a similar position at the moment. Basically what you want to do is ask for more responsibility from your PM, specifically to do work they'd normally do. Over time, that work will become part of your responsibilities. As you gain more confidence from doing those tasks, and as your team begins to recognize you moving away from programming and taking on more leadership, you'll put yourself in a good position to manage a sub-team on a small project. If you can pull that off, you can build on that for a bigger project/promotion to PM/SDM.

For example, we work in an Agile environment, so I've started running some of the 'Agile ceremonies', such as story refinement, estimation etc. From there my plan is to try and fully manage a sub team for a smaller project, as mentioned above. On top of this, I've arranged to go on a Project Management course in a few months. Doing all this should put me in a good position for a PM/SDM role.

Hope this helps and good luck!

dandare 18 ago 0 replies      
You will have to pick up some general management skills and for that I can not recommend enough The Mobile MBA by Jo Owen. Thin book, no BS, no fillers, practical and useful advices from a successful manager. That book should have been named MBA 101 for programmers.
ciucanu 19 ago 1 reply      
I think it would be a great exercise to shadow your Project Manager(if you have one) for a while. If you don't have one, maybe just try to virtually manage the project you're working on. You'll find that the PM job is not really what you expected to be.

I'm a sysadmin and I've tried to simulate this kind of change and I found that there are a lot of bureaucracy tasks which I don't really like :). If you ask me, the proper career path has the "team lead" position as the first step, which brings you closer to a "* manager" feeling.

Good luck!!

cpeterso 12 ago 0 replies      
My favorite books on project management:

1. "Project Management for the Unofficial Project Manager" is a high-level but pretty complete introduction. It has good good examples from non-technical projects based on the Project Management Institute's infamous "Project Management Body of Knowledge" (PMBOK). https://amzn.com/194163110X

2. Scott Berkun's "Making Things Happen: Mastering Project Management (Theory in Practice)". Scott was a program manager at Microsoft and describes some of the less process-oriented, more "in the trenches" aspects to managing a project. https://amzn.com/0596517718

3. Steve McConnell's "Rapid Development: Taming Wild Software Schedules". It's more of an encyclopedia of software project management and is now a bit dated (1996), pre-dating Scrum and Agile but all those ideas have been known for a long time. https://amzn.com/1556159005

Daviey 19 ago 2 replies      
Decide if you really mean Project manager, Product manager or Programme manager.

I don't see why there would be a specific list for programmers... but try and see if you can take on greater control of the tasks in your current job to build experience.

realworldview 18 ago 0 replies      
If only life were so easy then a roadmap or checklist would solve everything.

Experience is critical. Knowing what works is useful but more importantly knowing what doesn't work is essential. Focus on solving the issues and not on welcoming good news.

Start small. Do you have personal programming projects? Did you _project manage_ them? No? Then start by critically managing your own work. Stand back and introspect.

Do you want to manage any type of project or are you targeting technical projects, client projects, web projects? There will inevitably be a mixture so you need to understand that. Don't trust anyone. Keep asking for justifications and proof. Remind everyone about the different responsibilities that are present in any project and be specific about each individual's responsibilities.

What are you waiting for?!

clueless123 1 ago 0 replies      
Always remember: You work FOR the developers... not the other way around.
katpas 15 ago 0 replies      
If you'll be managing a technical product and other developers I'd recommend reading 'Managing Humans' by Michael Lopp (aka rands) - https://www.amazon.co.uk/Managing-Humans-Humorous-Software-E...

Short chapters so you can read it in chunks, its entertaining and based on his experiences.

Included it in this list of start-up books I wrote ages ago but you've reminded me its worth re-reading - https://medium.com/@KatAlexPas/an-hour-and-a-half-a-day-of-r...

gtramont 16 ago 2 replies      
My only advice is to not simply jump into a management role because it is the only career path you see. You can still be technical and progress your career! I definitely encourage you to try and experiment different roles, though, as this brings you versatility and understanding the lifecycle of a project.
Jedd 19 ago 0 replies      
It's tricky. As with any career (or just job-title) change you can try to manipulate your current / next role into including the key responsibilities of the new job title you're after -- in this case a PM -- and then try to leverage that work experience into a formal PM role.

You may need to entertain taking a backwards or sideways step into a precursor role - local vernacular doubtless varies, but maybe explore Project Officer or Project Admin job titles. Or, of course, both.

You could start reading up on PMBOK, PRINCE2, Agile/Scrum, etc -- obtaining accreditation on these tends to be expensive and a little tedious if you're not actively using the methodologies (in my experience).

koolba 15 ago 0 replies      
Do you mean project manager as in time keeping, planning steps, pipelining operations to avoid roadblocks, and dealing with other teams?

Or, do you mean programming manager? (i.e. less nitty gritty, more design, more delegation, presenting to higher ups)

abhishekdesai 16 ago 1 reply      
I highly recommend to improve your writing skills. You can start from here.


mmmBacon 11 ago 0 replies      
Learn that you are merely a coordinator and are not "in-charge." Too many TPMs try to be the boss.
nerdy 17 ago 0 replies      
Understanding the types of things that prevent programmers from completing their duties is the core of PM. That can be resources/access, requirements understanding, scheduling, productivity, etc. It's most helpful if you can achieve a deep understanding of the business objectives while understanding technical capabilities and limitations. Most programmers are required to do that anyhow, but it's especially important in PM because you'll be one of the earliest people on the tech side to influence new projects.

For example:

- If you're going to do an API integration in the coming days/weeks, make sure you provide an account with access, documentation, and consider reading the docs yourself to look for blockers. Don't focus too much on the implementation or architecture, focus on the business goals.

- If you're going to make a modification or new addition as the result of a new business requirement, make sure you are intimately familiar with the business domain and how the problem applies. It's important for the PM to understand what the business actually wants, not simply what they say they want.

- Minimize task switching by maintaining a clear strategy with the business side. When you hand off a task to a programmer the task should be in such a prepared state that nothing further can be accomplished without writing code. If business has an "emergency" that isn't, urge them to hold off until the current development task is completed.

- Build relationships. You want to be close to business and close to dev. I would often talk to developers about their day, off-work activities, family events, etc. They were more than happy to discuss their hobbies for a few minutes, I feel like it's time much better spent than group meetings and it gives them reprieve from work. Get to know them, having that connection is great for them when they can openly make requests and likewise for you. Sometimes they need vacation on short notice. Sometimes you have legitimate emergency tasks and need to ask a little extra of them. Having a real relationship to fall back upon is tremendously helpful, just be sure to reciprocate.

As a PM you can advocate for engineers and protect them from waste like excessive meetings and ensure they have everything they need to do their job. You're in a position to suggest raises, hardware upgrades, etc. Sometimes you have to fight for what they need.

You can practice many of these things before being a PM. Some of them are better left for your first opportunity managing a project. Where that line is drawn depends on the specifics of your circumstances. I was promoted to management fast after making recommendations which dramatically increased revenue, which doesn't seem like a bad way to make yourself more visible. Solve business challenges or provide new revenue streams if you're extra ambitious. If you want to manage, show initiative.

It's also worth considering you might not be happy as a PM. No longer coding, it was easy for me to feel like I never got anything done. Entering tasks/todos/bugs, talking with the business side, and writing emails doesn't feel productive after programming. Being ready for that possible eventuality is my best advice.

SeanDav 15 ago 0 replies      
I can recommend the book: The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win
agentultra 13 ago 0 replies      
I'm in the process of making this transition. One of the most important things I'm trying to hold on to is a passion for programming that goes beyond writing code. I see my new role as leveraging the 13+ years of professional development I've invested in by providing my team with guidance and critical feedback while ensuring business takes on less risk by making sure the software my team produces follows industry state-of-the-art practices and meets our deadlines. I tend to look at software development as an ongoing process and I hack the process itself to get the results I want rather than relying on my own immediate intuitions and knowledge about programming. In essence I set up the guidelines and processes that let my team be the best developers they can be and help them any way I can.

The other face of my role is being the intermediary between the stake holders and the team. While I am not a licensed engineer I try to behave as though I were: if I let bad code slide into production I might lose my license. The stake holders I collaborate with know this and they agree its an important position. However the business wouldn't move forward quickly if we were developing software like NASA. Instead I imagine there is an actuary assessing my technical decisions who will increase my insurance rates if I make poor decisions or lower them if I make good ones. This creates a risk-vs-reward balance that I need to consider when making decisions on behalf of the business... it might be worthwhile to accept some risk in choosing a software platform my imaginary actuary would asses as risky for the sake of the team who are familiar with it most. While I might enforce certain practices that will lower my rates like extensive fuzzing tests and formal specifications of critical components. It requires some balancing between correctness vs agility. While I don't see the two as mutually exclusive (in fact designing for correctness tends to make a team more agile in the long term) there is some give and take in terms of timelines and budgets that I need to be aware of. I act as the buffer between these concerns and the rest of the team whose focus should be on making software that fulfills our requirements and intentions. I attend the meetings and negotiate the timelines and handle the interactions with the rest of the business.

I think it's crucial for a manager of developers to have been a successful developer themselves with a wide range of experience. It's equally important to gain the trust of the team in your technical acumen: mandatory code reviews have been an invaluable tool in my experience so far. If you can give a good review it demonstrates your knowledge and wisdom while giving someone the opportunity to learn something new. It also lets you become familiar with everyone's skill level which is invaluable when trying to give estimates and quotes to stakeholders. Get out there and get some public credibility by contributing to open source projects, speaking at conferences, and even try your hand at writing. I've spoken at several conferences, have been a technical reviewer on a published book, and have contributed to the WebGL spec, Mozilla Firefox, Openstack, Python, and others. I'll be giving a talk at a local JS conference later this year. It will help if you can develop a reputation as someone trustworthy and wise.

Most of all... and this is universal; be aware of what you don't know. I've led teams in the past in the role of senior/principle/etc developer but I've always been sheltered from budgets, timelines, product scope, etc. I've been asked to interview people for positions but I've never been in charge of setting the policy on how we hire. I've learned how to adapt to social situations but leading people, especially creative and talented people, is like herding cats (I'm also quite introverted so it takes extra effort on my part to keep up). When you don't know how to deal with these things be honest and develop a plan of action to fill those gaps.

For me that means contacting people who I know are great managers (and not necessarily managers of technical teams either: one friend is a genius at running her fathers restaurant and her advice has been invaluable). It also means I keep a log of terms and advice I've been given that I don't understand. I use this log to do keyword searches and find books and blogs on the topics I'm missing out on.

Just keep at it and learn to look at the process of making software as one big software system itself. It can be quite entertaining and interesting.

gadders 14 ago 0 replies      
There are two aspects to project management. The first aspect is being able to manage the methodologies and techniques popular at your employer EG managing a sprint, building a gantt chart, creating the necessary project artifacts etc.

The second harder part is the mind set. Ultimately, you are responsible for the success or failure of the project. That means you need to do what ever it takes to make the project successful, and to be relentless in making this happen. Sometimes that will mean persuading business sponsors, sometimes it will mean chasing up why Developer Jane as the wrong version of the IDE installed on her laptop.

As Stuaxo has said, if you have a good team a large part of the job is removing obstacles for your developers. Another part of the job is attacking project risks and ambiguity around the project.

You also have to be prepared to frequently give bad or uncomfortable news to your senior management, and even tell them "No" sometimes.

I'd say learn what you can on the PM techniques, and then ask to shadow a good PM for the latter.

known 18 ago 1 reply      
Depends on whether you really like to "manage" the "expectations" of stake holders https://en.wikipedia.org/wiki/Project_stakeholder
partycoder 19 ago 1 reply      
Please take a look at the IEEE's Software Engineering body of knowledge. It will give you an outline of the topic as well as pointers to what reference material you can consult.


timwaagh 16 ago 1 reply      
i recommend poisoning the current project manager and offering to step in. when you are a manager you cannot afford the luxury of a consciousness so this is a great way to start!
p333347 15 ago 0 replies      
Project managers and programmers are blood rivals. So firstly, never seek appreciation from your team. If you get some, always be skeptical of these possible sycophants. Secondly, never try to be their buddy - it will never work, and if it seems to, it just means that they are tolerating you. Thirdly, you should use the phrase "good job xyz" ad nauseum (Programmers know that it is BS most of the time but still expect it most of the time). Lastly, learn Excel, especially merging cells and bordering and coloring them..
Ask HN: What should I do?
13 points by hamhamed  3 ago   7 comments top 4
pedalpete 2 ago 1 reply      
Mapping is getting expensive. I'm running a site which depends on mapping too (https://doarama.com).

We are currently re-architecting some services and one of the key items in our newest version is creating an api where we can easily swap out map providers.

You say it would take a lot to redo your code to swap service providers, but you don't have a choice. If you "want" to give up, then give up, that is a choice. If you're using this as an excuse, that's fine, but recognize that it is an excuse and not the real reason.

I used to run HearWhere.com (now gone). I was in a somewhat similar position to you shortly before I shut it down (https://techcrunch.com/hearwhere if you're curious). I would have had to do some major code changes due to outside circumstances, and I decided I didn't want to. Not that I couldn't. I just thought that the site had served it's purpose. I learned how to code, it got a bunch of interest, but in the long-term, I wasn't going to be the next songkick and didn't want to be. Mostly just because I didn't want to put in the effort in a very challenging industry.

What I'm saying is there is nothing wrong with stopping if you'd like. But just be honest with yourself as to why you are not going forward. It isn't because Google changed their API pricing, it is because you don't want to put in the effort to change to another service provider that you could afford.

acomjean 2 ago 1 reply      
Open Street Maps


open source mapping. You'd have to host or find a host. It will take time and effort, but the data is free.

there are other maps as services too.


csallen 2 ago 1 reply      
I don't know much about the Google Maps API, and this may sound obvious, but could you use caching to help you drastically reduce requests? I imagine many different visitors are making the exact same requests.

Also, are most of your requests coming from unique users, or do you see lots of users making repeated requests over and over? Maybe you could limit the number of requests for a single user. It sucks for them, but it allows you to implement a cap and affect the least number of people possible.

Are there any features of your product you can offload to other services? For example you mentioned directions -- why not link to Google Maps itself and let them handle that? (This might not be an applicable solution because I haven't studied your product to see how it works, but you get the gist.)

Is your code written modularly? Ideally you won't have to port all your code at once in some gigantic all-or-nothing rewrite. You can simply move one component of your code at a time to a free or open-source alternative to Google Maps. This could reduce your burden chunk-by-chunk over time until it's manageable.

Another avenue is to increase your revenue. Easier said than done, I know, but perhaps you could request payment/donations from users, or at least for repeat users. Or maybe you could reach out to the conferences on your site and see if they'll sponsor you.

Finally, I don't know anyone at Google, but it can't hurt for you to try to look up the right people and send some emails. I'd start with their developer advocates. This is a shameless plug, but I started a forum on my site (https://IndieHackers.com) recently as a place for founders to help each other out with problems just such as these. Can't hurt to post there and see if anyone has advice or connections at Google.

Good luck, sounds like a tough position to be in! (By the way, your site is awesome and it'd be very cool to interview you for Indie Hackers.)

nxzero 2 ago 0 replies      
Unlikely answer, but have you thought about asking Google to up the free requests for your account to 120k?

If they did grant you it, highly suggest opening a waiting list or new users, rate limiting current users, and switching to OSM.

Ask HN: Is web programming a series of hacks on hacks?
751 points by barefootcoder  23 ago   600 comments top 149
pixie_ 22 ago 23 replies      
Yes. I feel like we're in the dark ages right now.

JavaScript - Dynamically typed, does not scale what so ever. Code written in it becomes 'read only' very quickly. Impossible to refactor.

CSS - Also becomes impossible to manage. Who knows if the class you wrote is or isn't being used in HTML or JavaScript somewhere. Same problem, read-only, it only gets bigger and more unmanageable.

HTML - At the heart of it, the foundation is the layout engine and positioning, and it sucks. Flexbox was supposed to bring sanity, but I feel like we're still waiting on it.

Put these three stooges together and you get where we are today. Rewriting the same damn app every year in another framework in what can only be described as some sort of high paying purgatory.

jaredklewis 22 ago 5 replies      
I think it's worth noting that back-end web development is an usually pleasant place. In most other types of programming, many technical decisions are made by the platform and working with tons of legacy cruft is the norm, not the exception. For example, where else can you so freely choose the programming language?

Linux Driver? Use C. Mobile App? Java or Swift/Objective-C for Android or iPhone, respectively. GUI App? Again depending on your platform that will be either C++, Swift/Objective-C, or some .NET thing. Making a neural net? You could do everything from scratch, but it probably makes more sense to just use a platform like Tensor Flow and python.

Backend web development on the other hand: use anything! Wanna use lisp? Go ahead. Wanna store your data in an unproven experimental database? No problem. Wanna use micro-services? Monoliths? Anything goes.

Browsers are extremely complex application platforms. But despite how you may feel, they didn't succeed because of their weaknesses. The browser as an application platform succeeded because of its strengths. Web browser are the least bad option (and beat out many other worse options).

For better or worse, browsers are what we have. Make the most of their strengths, and deal as best you can with the weaknesses.

meshko 22 ago 8 replies      
It is scary how most commenters here are missing the point. No, not all programming sucks. Yes, web programming sucks more than other things. No, it doesn't have to be like this. Yes, even web programming was better 10 years ago. No, I don't know how to fix it. Neither do I know exactly where we took the wrong turn.One of my theories is this: had Sun not sued Microsoft over their extensions in JVM, MS would have kept working on their awesomely fast JVM implementation for Windows. That would make Java fast and not sucky in browsers. It would have kept Java Applets as a viable rich web app development option. Flash would have never risen. Java, being a significantly superior language to ActionScript, would have allowed us to build nice RIAs in an efficient, secure and portable way. Gmail and Google Maps would have been implemented in Java. Isometric Java. Get it? Get it? Back end and front end are written in the same language with strong typing and all that. JavaScript would have been dead by now. World would have been a better place.
troels 15 ago 4 replies      
My theory is that everything is a mess, once you get close enough to notice. Every profession that appears as if its practitioners know what they're doing really is a shocking hodge-podge of temporary solutions, strung together by proverbial duct tape. From doctors to flight engineers to anything else that you thought was running like a smooth machine. Programming is no different.
buzzybee 23 ago 1 reply      
Web programming has never been wholly controlled by a platform owner. I think that's the main difference from any traditional environment that might come to mind; Unix has its traditions, so do Windows and Mac. This is even the case for mobile. In the years when IE was the only browser anyone used, one could also hope to come to grips with its buggy CSS implementation, but that is past too, and in the meantime the backend was still churning from Java and the classic LAMP stack towards Rails and Python.

This is the end result of uncoordinated, path dependent "bazaar" dynamics where the core technologies are open, yet keep accumulating cruft, and are subject to regular proxy wars between large entities. The solutions today are better in that they are easier along certain axes - you can make a cookie-cutter landing page out of the box with Bootstrap, or add some interactive data viz by employing D3. For any random one-off there is an npm package that depends on 50 other packages. They mostly aren't there to help you architect your own thing in a self-consistent way, though - that's too much of a "vitamin" and not enough of a "bandaid" to be marketable.

broodbucket 22 ago 2 replies      
Honestly, pretty much everything is hacks on hacks. As a kernel hacker, hardware is hacks, firmware is hacks, kernel is hacks, it's turtles all the way down. The fact that anything works at all is a miracle. Some systems are better than others, but everything has some duct tape somewhere.

Designs and algorithms are abstract, the implementation is never as nice. We as engineers have to make the best of what we have, and to prevent making the situation worse to the best of our ability.

Uptrenda 22 ago 3 replies      

* Multiple browsers that respond to the same code slightly differently.

* Multiple platforms that all need to be supported.

* Countless different screen sizes to consider.

* Standards that aren't supported across browsers and platforms (and different versions of each in use)

* Hundreds of undifferentiated web frameworks that all claim to do the same basic task better than each other.

* Thousands of ways to host, distribute, and scale your application.

* Millions of ways to monitor service availability.

* Billions of ways to create APIs for your service.


* Too many technologies and skills needed to do the job.

* Design skills required if you want to create anything significant by yourself.

* The average web developer is practically an encyclopedia of technology yet full stack developers are still undervalued, low-paid, and mostly replaceable.

tl; dr: It takes a very special kind of person who doesn't immediately develop serious neurosis working as a web developer today.

kinkdr 22 ago 1 reply      
Without specific examples on what your frustrations are, my best guess is that you are just overwhelmed.

It was not long ago that I was in a similar situation like you, all these overlapping technologies looked unnecessary and redundant. Just the node ecosystem by itself, felt like a pile of crap that depended on a bigger pile of crap. For a simple application like "hello world" in React, I have to choose between a large number of possible combinations of packages and install and configure god knows how many of them.

But once you take sometime to adjust and familiarize yourself, you discover that each one of them is a little jewel and are the quite opposite of crap or hack you initially thought. At least that's the conclusion I arrived to.

So, my advice is to just take your time to familiarize yourself with as many technologies as you can in every aspect of web development. After the initial shock, you will start appreciating things and you will realize that they are made by excellent engineers and each has its own merits.

xg15 17 ago 0 replies      
I think the "design notes" section of the HTML5 spec puts it best [1]:

It must be admitted that many aspects of HTML appear at first glance to be nonsensical and inconsistent.

HTML, its supporting DOM APIs, as well as many of its supporting technologies, have been developed over a period of several decades by a wide array of people with different priorities who, in many cases, did not know of each other's existence.

Features have thus arisen from many sources, and have not always been designed in especially consistent ways. Furthermore, because of the unique characteristics of the Web, implementation bugs have often become de-facto, and now de-jure, standards, as content is often unintentionally written in ways that rely on them before they can be fixed.

Long story short, HTML and its satellites have quite a long history behind them, involving trade wars, religious battes and one or two revolutions (or coups, depending on your point of view)

I think the unique thing about the web "stack" is that for a long time it was the only platform usable and accessible by everyone and controlled by no single entity. This means there was a tremendous amount of people, companies and other entities that tried to influence it's design. Because background compatibility is an absolute must, this lead to hacks accymulating and the whole language getting incredibly messy.

From what I know, there has been at least one approach to start with a "clean slate" and design a better framework - XHTML 2 - but it failed due to missing backwards compatibility and a lack of political support.

The organisation currently in charge publishes the "HTML living standard" (formerly known as HTML5) and has given up on most notions of cleanliness (short of declaring it an explicit non-goal) in favor of backwards compatibility and the ability to move fast.

[1] https://html.spec.whatwg.org/multipage/introduction.html#des...

OliverJones 16 ago 3 replies      
With respect, at least part of your frustration comes from the "curse of the installed base."

Long-lived software with real users in any language running on any platform becomes complex, and picks up strange-looking appendages. Sometimes those appendages are nasty hacks, and sometimes they are well-built. But they are, in most cases, necessary to the proper functioning of the software, and responsible for its success with its users.

That's true of long-lived human work product in any discipline. Look at a municipal utility map sometime, and then consider that it is probably at least three decades out of date. That's why utilities send out "dig safe" guys to construction sites. That's why things go wrong in utility work after longtime engineers retire or die.

That being said, the capabilities in web browsers are definitely the utility company equivalent of of a pickup truck full of random bolts, pipes, wires, a shovel, a ladder, and a jackhammer. You can do many things badly with a web browser, and our ways of doing them badly have evolved over the past couple of decades.

I believe your frustration with aging web software is, in fact, a sign that web software has become generally useful to the population.

mashlol 22 ago 0 replies      
You can't really compare "web development" to "application development". I think it's more fair to compare a single web framework with a single native framework. The web ecosystem of frameworks is much larger, meaning there are far more options, much more to adapt to if changing projects. Switching from a well-written iOS codebase to a well-written Android codebase would be no different then switching to a well-written React codebase.

> I've been doing some web development on a fairly long-lived and large code-base

Perhaps it's just not a well written codebase. It's extremely easy to write bad code for web, where perhaps it's slightly harder to do for native development (although still very easily possible of course). It's also very possible to write good maintainable code for both as well.

> I'm not even talking about the fact that everything has to be stateless

It doesn't have to be stateless. Take a look at React.

> just the fact that it really feels like there's no consistent way to do anything

That's pretty much the same with application development. Perhaps not as much for Android/iOS themselves since there is basically only one option for each of those. Even within those there are many many ways of doing everything. It's up to everyone working on the codebase to keep things sane. That's no different with web development.

flukus 23 ago 1 reply      
I think it got particularly crazy around the creation of npm/node: https://www.commitstrip.com/en/2016/05/10/a-moment-of-nostal... . This was an enabler for complexity to spiral out of control.
elg0nz 21 ago 2 replies      
" In Richard Feynmans popular book Surely Youre Joking, Mr. Feynman! he tells how during his college years he often liked to play tricks on people. Most of these tricks were designed to show how dumb people are. For example, in a mechanical drawing class at MIT where the students were taught to use a drawing instrument called a French curve (a curly piece of plastic for drawing smooth curves), Feynman informed the other students that the French curve is made so that at the lowest point on each curve, no matter how you turn it, the tangent is horizontal. He reports that the other students in the class were excited by this discovery, and began holding up their French curves and turning them in various ways, trying to verify that the curve was always horizontal at the lowest point. Feynman found this funny, because they had already taken calculus and supposedly learned that the derivative of the minimum of any curve is zero. (Of course, its also intuitively obvious: If a curve at a given point is not flat, the point is obviously not the minimum.) Feynman says I dont know whats the matter with people: they dont learn by understanding; they learn by some other way by rote or something. Their knowledge is so fragile!www.mathpages.com/home/kmath687/kmath687.htm

"Easy to begin, hard to master" languages/frameworks let you go very far in spite of your knowledge fragility. Some interesting topics to reduce this fragility are data structures, design patterns, software and hardware architecture and, distributed computing.

If I had a penny for every JR. Dev that thinks they can get around the CAP theorem...

aabajian 14 ago 4 replies      
Some people have already mentioned GWT. I think this is the best evidence that yes, web programming is extremely hackish. GWT is an entire framework to write web applications in a strongly typed language - it compiles Java down to JavaScript. GWT was made in an era that we're just now escaping: the era of browser quirks.

IMHO, GWT didn't take off because of one reason: Its target demographic, web developers, do not have the same technical training as traditional computer scientists. What I mean by that is courses at places like General Assembly, CodeAcademy, and even KhanAcademy emphasize JavaScript/CSS/HTML paradigm. This triad makes it easy to create very nice looking website in very little time, but there's little focus on code organization, software design, efficiency, etc. It's much more of, "Now we want this box to fade out when we click on this button, let's see how we can write a function that makes this happen."

BerislavLopac 19 ago 0 replies      
> I've always found it quite easy to move up and down the stack

This is the most important point that most people overlook: the Web doesn't have a single stack, even though we talk about "full stack developers" and similar. Web is your ultimate distributed system (which is why you have no other option but to make it static); you never develop a single application, but a multitude of applications often (usually, in fact) executing on systems you have next to no control over.

Just think of your quintessential "Web page": a server prepares an HTML page which is then rendered in a browser. First, you have a server, which you rarely control (unless it physically sits on your desk/rack, and even then you're at mercy of your ISP). Second, even assuming the page was served correctly, it then arrives to another system which has OS/browser/display/etc which you have absolutely no control over except for hoping that it adheres to all the standards you have adhered to when developing. Even if there is no client-side code (i.e. Javascript) to be executed, even the simplest HTML (as well as CSS) are instructions that need to be interpreted.

What you call "hacks" are essentially numerous solutions -- some good and others less so -- to inherent problems of distributed computing, working around the peculiarities of the underlying platforms (namely HTTP and TCP/IP) to ensure reliability. Many things that are taken for granted in platform-specific development simply don't exist here; as a reminder, take a look at https://en.wikipedia.org/wiki/Fallacies_of_distributed_compu...

jorblumesea 22 ago 3 replies      
While I hate css, sort of like js and hate html layout, a lot of the problems come from accessibility. In that, it's so accessible anyone can do "web". This means you get non-engineers with no engineering background put into situations where thinking about things from an engineering perspective would really help and might produce actual workable solutions.

Like wtf is this:


str.slice, str.indexOf are standard lib. Adding another layer of complexity for basic string functions that could easily be done natively is very poor form. This kind of stuff happens all the time in the web world. There's a layer of "lack of competency" bootstrapped on top of what I would consider a non-intuitive base.

msoad 23 ago 1 reply      
I don't know what are you referring to as hack on top of hacks? There are tons of big open source and closed source web based project that are easy to follow what's going on and everything is well structured. Look at VSCode code base [1] or if you're a Googler look at Google Photos source code.

People look at React and Webpack and all these small little modules that people put together to make something work and think that's all the web is.

Although, I think React, webpack, Redux and all these little hacks are amazing for exploring what's possible in web.

[1] https://github.com/Microsoft/vscode/

kowdermeister 19 ago 1 reply      
> Am I missing something?

Probably. Good folks to learn from.

> Is it me resisting change?

Only you can tell, but client side web development is fine, thanks :)

> Is web programming really that bad?

No, it's doing fine, thanks for asking.

> Is it really just that I need a new mental paradigm?

If you really want to take your time working with client side projects, then you need to relax a bit and just learn a bit more and play a bit more with these techs. Some you'll hate, some you'll love. That's it.

I don't really understand why is this hate against web development goes on HN. I'm building web apps for lots of years now and the major obstacles were never really the technology, but money or people.

Building UI-s in the browser with CSS is not a rocket science; a JS app is easily scalable to 100k lines of code; backend wise you need some good team and a sane PM who don't want to immediately scale your app to Death Star level. Projects does get fucked from time to time, but if you picked your stack well, you'll be fine. I admit it takes experience to identify the crap tools, but what profession doesn't?

MrLeftHand 17 ago 1 reply      
I feel the same thing to be honest. As a mostly Backend Java guy I just have a hard time to get my head wrapped around the whole Frontend/SPA thing and the multitude of frameworks, styles, tools and so on; just don't help at all. It feels like everyone is reinventing the wheel constantly.

Right now I try to write a simple react SPA and I use more libraries as if I would have done it in a tomcat webapp with static html pages.

Documentation is relatively scarce or non-existent at all and in the end you end up looking at code on github. Hunting on Stackoverflow and blogs written by people and realize that there are 100+ ways to do the same thing.

Looking at code would be fine, but looking at Javascript it's hard not to see how easy it is to write in different styles, which makes understanding the things harder. Also being in the middle of transitioning to ES6 makes it more complicated. Of course ES6 will be a big leap, but ES5 won't go anywhere anytime soon because of backward compatibility. So you will end up with overlaps and weird code.

Sass definitely helps with css. React is a great way to develop nice SPA sites webapps.

I don't know if the whole Frontend part is going in the right direction, but it will need some time to settle. For now it's more fragmented then the Android platform. And it really feels like we are trying to put a lot of stuff on top of protocols, tools and standards which were never meant for this in the first place. We might end up having such big scripts loaded for a page, that it could have been just a thick client instead of a web page.

We threw away Java Apps, we threw away flash, we are throwing away jsp/jsf, PHP, etc... And now we are recreating the same behavior with Javascript/CSS/HTML5. Soon it will be only Javascript and you literally won't write not a single line HTML. (Well React already does that to be honest.)

So yeah, interesting times. And it's hard to jump on this train whilst it's moving so fast.

27182818284 22 ago 0 replies      
Yes, yes, a thousand times yes. I completely agree with you.

John Carmack also agrees with you, though not about the web per se: https://twitter.com/ID_AA_Carmack/status/771749108780523520

This is how I feel too. If I had to put a finger on the root cause, it is because of the speed demanded. E.g., going back to the left-pad problems that happened in the Node ecosystem, I know lots of folks that know how to do that, but when speed comes up and they can just add a package, that's what myself and others are often going to do.

soheil 21 ago 0 replies      
I'm not sure what you mean by "a new mental paradigm", the web is a complex system you cannot expect it to be completely reducible to a few simple constructs. You generalize the word backend programming as if it's just one thing. There are hundreds of ways to program a backend system, you can choose from .NET to C/C++ and rarely they are hack-free as you suggest that's not even to mention the platforms they run on like for example BSD, Unix is a series of hacks on top of others, there are often 1000s of different ways to do the same thing.

I simply don't buy your point that "backend" environments are somehow more elegant to work in and easier to reason about than the web.

You still have to decide which backend platform you choose and each has its own series of convoluted hacks associated with it.

hannob 22 ago 0 replies      

I got this realization during a study project where I investigated the use of secure cookies (was 2009, it's public [1]). It's just one example, but you can find similar things everywhere.

Sessions in Web applications are realized using cookies, which is not a very good way, because once someone manages to steal your cookie your session management is broken. And there are plenty of ways to do that, because there is no good separation of the session from the rest of the functionality. Because both cookies and sessions weren't in the design of http/html before, they were a later addon that. So was javascript. So were many other things.

The thing you have to realize though: Things work. It's been the most successful technology of the past decades. There is no point in moaning that things would be much nicer if we'd redesign them from scratch, because it isn't going to happen.

[1] https://blog.hboeck.de/archives/681-Study-research-project-a...

gfody 21 ago 0 replies      
There are billions of dollars made annually that depend on the web being a complicated clusterfuck of spaghetti. It's all about tracking and targeted advertising that wouldn't be possible if a random website couldn't indirectly load a script that indirectly loads a script that loads an image that indirectly drops cookies from a thousand different domains based on a hundred things just sniffed from your browser and the current marketing efforts of thousands of companies bidding for impressions or clicks or whatever.

My pet theory is that commercial politicking is at the heart of everything wrong with the web. Apple, Google, Microsoft, and Mozilla basically sabotaging initiative after initiative for decades trying to fuck each other over in the short term and long term. Like why didn't xhtml catch on, why did IE never support xpath, where did flash go, what happened to silverlight, there are hundreds of "how did we get here?" stories. And I imagine for every minor decision that had far reaching repercussions on web development there was a highly strategic debate at each respective company with high level executives weighing in on technical subjects they had no business weighing in on with shit like "if we support this simple protocol we risk losing our control over this other simple protocol". Basically a bunch of cut throat executives playing statecraft with their browsers.

Svenskunganka 22 ago 0 replies      
I think the problem boils down to how the different browser vendors has treated web developers throughout the years, not giving them a consistent environment across the different browsers, not recognizing certain bugs so they've lived on and become un-fixable due to backwards compatibility.

Microsoft with their IE has been the biggest culprit in this, luckily they've taken Edge in the right direction and has really stepped up their game these last two years, but now Safari is at a crossroads and may just end up like the old IE if they take the wrong path. If only the large browser vendors could really, really get together and give us web developers a consistent environment without bullshit. Take Apple Safari for example, keeping Service Worker "under consideration" because the features it brings rivals native mobile apps which they make a lot of money from while all other "large" browser vendors has already started implementing the feature, some even ship it already.

Beltiras 17 ago 0 replies      
I think you come to the conclusion because necessity is the mother of invention. Web development is often done in a high-pressure environment with great focus put on churning out features. This leads to the hacks-on-hacks mentality because the needs of the day trump any sort of coherent principle emerging from thoughtful work on the codebase.

I resided over a medium sized custom CMS that was going through changes on all levels. I tried my best to keep it pretty. Fact it was made with Python made it easier for me. Due to that I was quick to find aesthetics to guide my coding. One of the "ugly hacks" actually turned out to save some 50 ms of time on each request. That was significant enough for me to go find a deeper principle for it and implement it in a nice, clean way.

Hacks-on-hacks is SNAFU for web development. Just remember to demand time to refactor and clean up once in a while, otherwise you'll end up shoveling shit from one pile to the next and never managing to vacate it.

brlewis 12 ago 1 reply      
Lately I've been doing some web development on a fairly long-lived and large code-base

Therein lies the problem. I've been doing web development for 22 years and it's only just now getting good. React-like apps (I actually use Mithril) give you a much better understanding of how the app gets into a particular state when compared to jQuery.

Web programming on your typical long-lived large code base really is that bad, but start from scratch with something React-like and you'll have a much better experience.

intrasight 22 ago 1 reply      
Sometimes I ask myself the question by doing this thought experiment. If we encountered a more advanced sentient species that writes code, would they say "Yeah, we went through that html/css/js phase of development, and in fact all sentient species do so. We got some good mileage out of it, and it was a total hack for a generation (we refer to that time as the lost generation), but it evolved into our current 'System X' for user-facing app development. Due to the Prime Directive, we can't show you what 'System X' entails. You'll just have to evolve there yourselves."

Or, would they say "You guys are bloody idiots. Come back when you shopped at the galactic clue store."

TickleSteve 17 ago 1 reply      
Yes (simple answer).

but really, its less "hacks on hacks" and more "unneeded abstractions on unneeded abstractions".

The inefficiency of modern web-stacks continues to absolutely astound me.

When people tout the 'efficiency' of language A against the equivalent C as being "less than 2x"...

jeez... that means you're throwing away double the power that you need to.That means you've got double the number of air-conditioners cooling your server-room. double the power bill, etc...


BinaryIdiot 22 ago 0 replies      
I've done front end work for nearly a decade now. You're right and I think frameworks are a big part of the issue.

Looking at how to do something on the web there is a different way to do it in React, Ember, Angular, jQuery UI, Bootstrap, ExtJS, and about 50 more slightly lesser known frameworks. They don't interoperate well at all. Yes it all boils down to HTML / JavaScript in the end so there is always an integration point but try writing a component that integrates well in even 2-3 of frameworks.

Honestly if more people taught solid coding structures and the DOM API (which, yes it's awkward but with the features HTML 5 brought in plus well structured code it's not that bad) you could have a smaller, handful ways of doing something properly and you could even share components far easier.

Granted frameworks are not the only problem. But, in my opinion, they've severely splintered the way the web is developed.

joemi 23 ago 0 replies      
There are a lot of articles out there arguing that the web wasn't designed with modern web apps in mind, and that that's a source of a lot of strife, so you're not alone in this feeling. But there's also a lot of articles that argue that that even though it wasn't designed with this kind of use in mind, that there are ways it can work well.

Out of curiosity, what's your stack look like? Not all stacks (or components of the stacks) are created equal, by a long shot. Some devs love to try out brand new or new-ish frameworks/dbs/etc that haven't got all the kinks worked out yet, simply because it's the new hotness.

BjoernKW 23 ago 1 reply      
Isn't everything? With web programming that's very much a feature, not a bug. You could say that Perl's - the first major web back-end programming language - TIMTOWTDI paradigm is a feature of the web itself.

MFC, Swing, Cocoa, Qt all offer more or less consistent experiences but none of those is as flexible as what you get with the web, which also is a feature, not a bug, because with a certain OS you also want a somewhat consistent, vendor-independent UI / UX across applications.

That said, if you aim for consistency, there are widely used frameworks and tools like Bootstrap, Modernizr, jQuery or Angular that can help you in that regard as well.

isoos 17 ago 0 replies      
The best analogy I've seen with regard to code health is that software is not built, not engineered, rather it is grown. Depending on the technology of choice, your garden may adopt to different climates, requires different nutrients, and pleases different audience (or achieves different goals).

From that perspective, JavaScript is a garden where once planted, you can't change anything in your garden, and pretty soon it becomes inflexible to build upon old stuff.

The more tools you have, the better of you can get. E.g. TypeScript, and especially Dart help a lot with tooling (and making gardening fun again). What you end up with is isolated components that encapsulate their own code, HTML template and CSS rules. It may be called web component, angular or one of its many competitor, but eventually that is what brings you sanity.

And speaking of sanity: I've found that "the current hype" is almost always broken, half-baked, and lacks proper engineering practices. Go figure why... Use the tool that you enjoy working with and does the job well, and ignore the rest.

ng12 23 ago 1 reply      
I don't know that they're all "horrible" hacks, but yes. We still generally don't know the best way to build a complicated website. We can't even agree on the simple stuff -- for example Angular2 and React, two of the hottest frameworks, pursue wildly different philosophies.

I think it's exciting. It keeps me motivated to learn new things, and really think about the code I'm writing.

vikaveri 22 ago 0 replies      
Web development is like the scene from Indiana Jones and the Last Crusade. You get to pick your poison and there are a lot of people who will choose poorly. Doesn't matter how good you are, chances are, on occasion, you'll choose poorly as well.

There's no point trying to read and understand every library and framework that comes out. HN has half a dozen interesting ones I skim over each week because what you need to know is what's out there, what's been done, so when you come across a problem you don't have the tools for, you can come back and choose the tool that best fulfills the requirements you have at that moment.

And those requirements will change from project to project. There's no cure-it-all. Expect to switch frameworks or libraries very often. You probably wont have time to learn all the intricacies of a framework before something else is more suitable for your needs.

It's not impossible or required to write bad code and have bad design, but it's easy to shoot yourself in the foot when you don't know what you're doing. You will see lot of bad design and poor code though, there are a lot of coders who are starting out with web development because it's an easy place to start with.

Sometimes you need just a spoon and sometimes you need a fleet of excavators and the hard part is knowing when to use what.

brwr 5 ago 0 replies      
Web developer is not ideal. That is more of a people issue than it is a technology issue.

Whatever our collective gripes about JavaScript, HTML, and CSS, we all know how to use them. We know how to handle cross-browser compatibility and different screen sizes. What we need to do a better job at -- and I think this is the root of the problem you're describing -- is pushing back on businesses wanting to ship features too quickly.

We've all been at places where no one values good work on the client. The C-levels want to get things out the door as quickly as possible. They complain that our work has bugs and we tell them "Well that's what you get for telling me I had 3 days."

Because of this heat, front-end engineers rarely engineer their software. As you put it, they hack it together on top of libraries that have been hacked together by others. The solution is to take the time required to do things correctly. That means testing. That means not shipping features so we have time to refactor and upgrade frameworks. That means paying attention to performance and developing tools for debugging errors in production. If we want web development to get better, these things can't be afterthoughts. They must be considered before we say something is "done" and ship it to production.

combatentropy 22 ago 0 replies      

 > a fairly long-lived and large code-base
Such could be spaghetti on any platform. To understand web programming, I wouldn't start with something big and old. I've been doing web programming for more than a decade, and I still don't get the majority of web frameworks. Start instead with the basics, and work your way up:

1. HTML. Don't view the source of websites and web apps to understand HTML. Read a good book or tutorial. HTML Dog is a good one.

2. CSS. Likewise.

3. JavaScript. Definitely don't try to learn JavaScript by viewing source either. Instead, maybe HTML Dog. There's also Douglas Crockford's _JavaScript: The Good Parts_ and David Flanagan's masterpiece, _JavaScript: The Definitive Guide_. I don't know how I would have ever understood JavaScript if I had not taken the months to read Flanagan's book cover to cover.

That takes care of the client side. For the server side, it should come much more easily. Basically you have a database, like I'm sure you're used to. Then you need a web server, like Apache or Nginx, and some kind of glue language like Python or PHP. Many people put a lot of code here. But I like to keep it pretty thin: like the database and the browser just talking to each other. Even so, just running this side of the affair can be a full-time job in itself.

I recommend at some point familiarizing yourself with the HTTP protocol in general: all the headers, request methods, etc. Basically once you can use Telnet to imitate a browser requesting a page, you'll feel more comfortable with how simple it really is.

nostrebored 23 ago 2 replies      
There is some stuff that actually makes logical sense, like CSS Specificity, but yes a lot of it is hacky. I mean, negative margins? Clear? Thirty different lines of browser-specific rendering tweaks?

WebKit is great, but any attempt to reform the competing browser shitshow reminds me of that xkcd comic about competing standards: https://xkcd.com/927/

(former web developer -- get out while you have your sanity)

narrator 22 ago 2 replies      
>Can you recommend any good resources to help me orient my mind to this new way of thinking?

The thing about web frontend development is that it suffered from the browser wars and having to appeal to amateur developers. Amateur developers love "Worse is Better"[1]. Basically sacrifice all consistency in favor of simplicity and getting started quickly. "Worse is Better" makes things simple to the point of making ugly hacks for certain situations that don't fit that extreme focus on simplicity.

The browser wars made everything horribly inconsistent. Microsoft's strategy was to make the most broken non-standard code possible automatically work and everyone had to emulate that.

The most clean frontend development I've worked with was Angular with ScalaJS. Typescript in Angular 2 should be really clean. The underlying web browser stuff will never be cleaned up since it has to be backwards compatible.

[1] https://en.wikipedia.org/wiki/Worse_is_better

Edit: Replaced the JWZ URL with wikipedia. Apparently JWZ has some anti-hacker news redirect code on his site.

Myrth 23 ago 1 reply      
I think it feels hacky because it is, and it's natural. And by natural I mean this is how spontaneous complex systems evolve. Internet is a result of half of a century of millions of people's contributions for different and often opposing goals and priorities. For other examples of hackiness take a look at other complex natural processes, like multicellular living creatures and ecosystem in general.
richardw 21 ago 1 reply      
I use GWT for anything serious. It's not what the cool kids like, but it feels super-solid compared to the flake that I experience when working with a heap'o JS libs. And debugging it years later is awesome (barring a couple gotchas) because it makes sense.

I've always thought GWT has a crazy learning curve until we did a project in Angular2 on top of ASP.net core, using a customer-selected template that required tons of JS fun, with random CSS class names that have zero obvious semantic benefit so you have to look everything up. Not even Typescript could save the feeling that we were building a house of cards in a strong breeze. Same with Django + JS. Just felt too scripty for me.

I don't like leaky abstractions but honestly the modern web fundamentally forces you to use them for anything vaguely complex. It's not getting easier, it's getting much, much harder. GWT at least gives me a way to trade off complexity for a clunky but solid language, and I get to reuse code on the front and back ends.

kuon 22 ago 0 replies      
I think one reason is because there are two kinds of web development.

Website dev and web app dev.

I don't think they are mutually exclusive, but website dev is about styling and navigating into documents. It's stateless and the variety of content is unlimited. I don't think there is a "problem" here, it works, has good tools for what it has to do.

On the other hand, there is web app dev, and app dev is messy at present. My guess is that is lacks governance, it's not necessarily a bad thing, but it means things are taking time and must prove themselves to gain traction and become standards.

But yeah, doing something like a calendar input, with really perfect behavior, where you can navigate the calendar with the keyboard if focused, that is accessible, works on all device is insanely hard and not solved by the platform yet, so everybody try something different.

Also, a lot of people that are more authors than programmers are "hacking" "app like" functionalities into their website, and it can get messy very quickly. No pun intended.

socmag 16 ago 0 replies      
Yes it is awful.

How people manage to build applications given the festering pile of rubber bands, glue and fish heads that we call web development platforms these days is beyond me.

There was a time when even I could build a website. Then I stepped away for a few years to do other stuff and came back to witness in complete horror where things are now. Let's be frank, the tooling is abysmal.

I've been taking a look at Polymer, Dart and Flutter recently.

Looking at the goals of those projects I'd say that reading between the lines, even the likes of Google understand that something has to change.

freyr 18 ago 0 replies      
Yes. Web programming is a mess. It's layers and layers of half-baked solutions, each patching deficiencies in the previous layer while introducing new deficiencies. It's a convoluted Rune Goldbergian contraption, attempting to make a general application framework out technologies originally designed to display hypertext.

The individual parts make sense once you're familiar with them. Some are even designed by conscientious and competent people. But the feeling that, taken together, it's an ugly hack is inescapable.

TheAceOfHearts 21 ago 0 replies      
It's inconsistent, but it's getting better. The tooling has been drastically improving over the last few years.

There's no "one true way" of doing stuff and the barrier to entry is low, which causes lots of different ecosystems to evolve. The browser vendors are trying to focus more on lower-level features, which the community is expected to use in order to build better abstractions.

I don't think it's worse than other platforms.

It really depends on what you're building. If you're making something that's largely document-focused, it's extremely easy. But as you start building more sophisticated applications, the complexity increases.

thrilleratplay 11 ago 0 replies      
Yes/no. Code is developing faster than standards update:

HTML - HTML 4.0.1 -> HTML5 (14 years)

CSS3 - in development since 1998

JS - ECMAScript 3 (1999) -> ECMAScript 5 (2009) -> ECMAScript 6 (2015...ish http://kangax.github.io/compat-table/es6/)

I think web development is a lot like Perl. It is flexable enough for anyone to write something simple and quick but creating a large maintainable project takes a lot of discipline.

I use a series of linters, style guides and naming conventions to keep from shooting myself in the foot but still will need to go back and clean up from time to time.

webXL 12 ago 1 reply      
Ah, yes. Another round of grumpy 'ol "why can't I pick/control every aspect of my application environment in the languages I love" developer whining. I swear some people just love saying "hacks on top of hacks". It's the new pejorative of our industry, despite the unparalleled success of what it's intended to dismiss. The hacky-ness we're observing is just an evolutionary byproduct of the "power vacuum" of software decentralization and democratization. Yes, it's inefficient and ugly in some places, but it's an amazingly practical way to distribute software. Just remember your perfect system is only perfect for you or your financials. To state otherwise is sophomoric and unscientific.
toddan 15 ago 0 replies      
This is why i find it so much fun to do applications on windows with .net you only need to know one language C# or VB.net and then you are set. You can create anything with just this, of course it will only work on windows but i dont mind, it just such a pleasure to only have one toolset and then just focus on the task at hand.
jacquesm 18 ago 0 replies      
Definitely yes. I'm on the sidelines until things will settle down into something that makes more sense and if it doesn't then I won't be doing any web development.

Software is such a huge field there are a ton of interesting challenges outside of the web and the current mess does absolutely nothing to keep me interested. It's a veritable tower of Babel without a clear sense of direction or longevity.

cloakandswagger 22 ago 1 reply      
The internet as a whole is one giant, hacked together system. There's no doubt that, with a magic reset button, we could build an internet that is vastly more secure, efficient and reliable than the current one.

But that's the nature of an emergent, distributed technology like the internet. Once the concept was born we ran with what we had, and once adoption hit a certain point it became impossible to start over again and do it correctly. I see it as an innate challenge that comes with the domain, like EM interference for electrical engineering.

micro_softy 21 ago 0 replies      
Do web developers find ways to create work for themselves?

You allude to it below when you say "zillions of hours".

There is a significant amount of money moving through the "web development industry".

People are getting paid to write things that suck.

The internet actually has made leaps and bounds in terms of what can be delivered over it to the masses.

But the "web" has become a cesspool of redirects, overstuffed headers and pages crammed with beacons, ad server links and ad-related Javascript, accessible through ad-sales-company-sponsored software ("web browsers") to run the ad-related Javascript.

If and when users grow tired of web advertising, the entire system is a risk of a serious correction.

Again, significant and increasingly larger sums of money are moving through the web ad and user data collection cesspool so no one really cares how poor the quality of the "content" becomes.

And you want to learn to orient your mind to this "new way of thinking"?

Maybe you are not resisting change. Maybe you are resisting stupidity. Your time may be better spent focusing on backend development. Today's "backend" may be tomorrow's frontend.

All that "content" can easily be delivered without a single line of Javascript and without using search-engine-ad-sales-company-sponsored software.

kafkaesq 12 ago 0 replies      
Was it ever anything different?

From the very beginning -- you know, back to the <img> tag, HTTP 1.0 -- it was always a series of shrewd tradeoffs (a.k.a. "hacks") in favor of what can be put in front of people now instead of what might take another 5-8 years of IETF meetings and mailing lists debates to hash out.

Referring to "the web" as such; not "the internet", for which the initial design choices, while still hackish in their own way, were arrived at in ways decidedly less brutish and expedient.

samblr 5 ago 0 replies      
My view is exactly contrary coming from system development experience. I cannot think why would anybody handcraft MVCish frameworks in js, jquery etc. I have programmed MVCish UI frameworks and middleware in c for AV products 10 years ago. And as a UI dev u want a working MVC. Now I'm using angular and totally feel at home. I think sans these new frameworks web must have been really dark place.
dandv 9 ago 1 reply      
Yes, the web was meant for building pages, not applications, and that shows. HTML and CSS are horrible at laying out apps (even with flexbox). Which is why using front-end libraries is critical. Have a look at https://webix.com - it's amazing how expressive that widgets library is: 10 lines of code for a master-detail tree+grid layout.

As for the server side and the client-server communication, nothing really beats Meteor - https://wiki.dandascalescu.com/essays/why_meteor. It removes a lot of the paradox of choice, while still letting you swap components out when you're ready (e.g. you can use PostgreSQL instead of Mongo, or React instead of Meteor's default view library).

Shorel 9 ago 0 replies      
In my work I can be writing C++, or PHP or Javascript, depending on what part of the stack I'm working on.

C++ bugs are a bit hard to find, because the error messages are not very useful, so I launch the debugger, do a stack trace that fills the screen with arcane texts, then open the relevant source file in the line pointed by the debugger, and after about a minute of staring at that line and thinking, the bug is fixed.

In comparison to modern C++, JavaScript issues are complex beasts that can eat all your morning and give nothing in return. And then you test with another browser and it starts all over again.

Even so, some things like detecting the decimal separator supported by your operating system work in IE and Mozilla but were never implemented in Chrome, so you can't never really fix that 'bug'.

the-agreeer 22 ago 1 reply      
All these dozens of disparate ad-hoc web technologies and defacto standards are built like a tower of babel on quicksand. No one truly understands all of it. Without View Source and a healthy dose of copying/stealing no one could get any of it to function. Yet in spite of all of this - this web thing somehow works. The only takeaway is to not bother trying to grok all of it. It would only lead to madness and missed deadlines. Just try to avoid frameworks that emphasize purity of design over pragmatism and instead use a workflow that gets you to the finish line.
david927 11 ago 0 replies      
We're a smart industry, but we're not a wise industry.

We focus on solving tactical problems, ignoring the mountains of technical debt that are created from it, and that it leaves the strategic problem worse. We will do this because we need the solution today, not tomorrow.

We can elevate out of this when we're ready, when we say "enough is enough."

otabdeveloper 22 ago 1 reply      
All of human civilization is a 'series of hacks on hacks'.
EugeneOZ 22 ago 0 replies      
Some parts of web-dev are really chaotic right now, but other parts can be very well-organized, same as server-side code.

For example, you need to compile all of your es6/es7/typescript code to JS (because nobody will write in pure ES5 nowadays), minify and concatenate resulting files - this part is very chaotic. But you need to touch it not so often.

You also need to write unit-tests. Tests itself will take 10% of their configuration code, it's very annoying also.

But when you'll write e2e tests, everything will be much more clean.

Main part, JS code (I recommend TypeScript) can be organized by same rules you use on the server.

Frameworks: Angular 2 is closer to Java enterprise apps (with all good and bad parts of it), React and jQuery are not frameworks and if your codebase is built on jQuery - bad news, it will be mostly spaghetti-code.

benoror 12 ago 0 replies      
Hackish? yeah!, immature? still yes!, sucks? hell no!

I believe the very nature of the web, and the internet itself, is a story of a hack onto another hack.

Think about the first internet communication mediums, protocols, etc. They were all "hackish" solutions. Internet over the telephone landline? why not? change it to the cable TV infrastructure? Sure!

The web itself morphed from text-based solutions (think telnet, gopher) to hyper-text documents and nowadays to full-applications. I acknowledge that this last iteration has been a growing pain indeed, it's a mess and hasn't been consolidated, yet.

Nevertheless I think the reason behind this hackish nature is due to the fact that the web (and the internet as a whole) are always pushing towards an Open Platform, open to everyone to develop and consume, without any corporation behind it.

Compare that kind of ecosystem with the more closed less-hackish ecosystems like Windows/OS X, Android/iOS app development, you can see the difference.

Just my two cents :)

harshvchawla 9 ago 0 replies      
It was today itself that, when asked by my manager, I was mentioning my progress on a recent web ui project as "guerilla warfare" :)

Also the discussions on jenga-style code top-ups also look like jenga style discussions!! (whats this phenomenon called?) - i wish hackerNews implements a css framework to streamline messages by tags/rankings/marking favorites.

Maybe its the way of hacking html/css/js that I am liking about it (and I am just few weeks into it as of now)

jorgeleo 14 ago 0 replies      
That is because Html is a more readable form of RTF, but still a document descriptor none the less. and hack in with javascript.

If the world had settle in Word format, instead of javascript we will be using VBA, and everything else will look exactly the same.

I think what we really need is a web app environment, with programming as the first though

sp527 22 ago 1 reply      
What you're witnessing is the migration of complexity to the frontend. It's becoming very difficult to find a backend problem that doesn't have a well-defined, generally accepted solution and accompanying FOSS that you would be stupid (or even borderline criminally negligent) to ignore. In fact, full-stack programming in general is boring enough that I welcome anything that stirs the pot a bit. That said, having tried at one time or another PM, management, and sales: programming is the worst monetizable career option, except for all the others.
tekacs 22 ago 0 replies      
I'm more unnerved by how few maintainers so many critical/core open source projects/libraries have, whether in web or otherwise.

However high our project or company's bus factor gets, it's concerning to realise that the framework or critical library underlying has a bus factor close to one. We can certainly adopt it, but that's folding in a lot of new complexity. o_O

This applies irrespective of the language, incidentally - it's often true in Java/Python/Scala even as in JavaScript/npm, as much as people like to bash on the latter.

achen2345 15 ago 0 replies      
I have been working with web technologies directly (not through Java or some other language) full time for almost 20 years. Here is the problem:

* In the 90s sloppy was awesome. The web is driven by marketing interests and not by technology interests. The name of the game back then was "get big fast". You need incompetent developers (many of them) to work in the technologies for extremely low pay, which means the technology must be extremely forgiving. The technologies tolerate a tremendous amount of sloppiness and so become sloppy themselves.

* The education around web technologies is deplorable. There are a couple of reasons for this. The technology is moving, growing, and enhancing rapidly making it hard to keep up with. Because there is sloppiness baked in its hard for people to immediately jump in and know the best approaches and avoid the pitfalls. Web technologies are generally considered incompetent toys (in academia) compared to more entrenched technologies like C++ and its spawn (C# and Java).

* Don't break the web. This means old broken approaches (the sloppiness) will continue to be supported forever even after they are deprecated and killed. We know what the best approaches are, but making the technologies more strict and unforgiving is the enemy of all marketing and shames incompetent developers (most of them). It is one thing if your language of choice fails and yells at you during a build process, but it is something different when this happens in production because web technologies don't require a build process.

You can safely ignore the technology excuses from many of the replies on here. These opinions come from people who learn web technologies only after learning something else (unrelated) first. For example, JavaScript is not Java, and if you look at it through a Java lens it will be incompetent for all kinds of reasons, but really the developer is just wishing they were still writing in Java. JavaScript will never be language x, but that isn't a valid reason to call it incompetent.

altern8tif 18 ago 1 reply      
One thing I haven't seen mentioned is that while the developer experience is getting more complex, the user experience is getting better and better.

That, in my opinion, makes all the messiness worth it. I'm not saying that there's nothing wrong with the state of web dev now, but it's not without reason that we are here today.

Remember the days of table-based layouts in HTML? shudder

icedchai 15 ago 0 replies      
I've been doing web development since 1995, starting with CGI "apps" in C and Perl. Yes, it is a pile of hacks. The fundamental issue is we're building "apps" on an environment intended for document delivery.
mmilano 11 ago 0 replies      
Are you sure the assessment web programming being a series of hacks on hacks isn't an artifact of inheriting a fairly long-lived and large code base?

I don't think I've touched a large codebase that has been around for a long time which didn't feel hackish.

I'd make the evaluation of web programming based on a language and framework that feels most proper to you, and based on the use of it with a brand new app.

nallerooth 21 ago 0 replies      
The web itself as we know it, was born from a bunch of hacks clobbered together by people who thought that the most important part of development was to "ship code". Features like images in browsers, or JavaScript, were designed and implemented in very short amounts of time and then all the cool features were copied by other browsers. With such a foundation, I think we can establish that modern web development indeed is a "hacks on hacks" thing.

A lot of people still believe that software development is all about "shipping code". And since many developers work alone, or in small teams - things like architecture, knowledge of web interfaces/APIs, etc. may not be something the developers are familiar with. Then the project becomes popular, which makes it harder to clean stuff up without breaking code depending on your project.

New developers hearing about companies embracing stuff like "Break stuff - ship code" isn't really helping them focus on quality either.

agentultra 14 ago 0 replies      
Web programming is not that bad and I think you are missing something.

You're entering a time where ES6 is mostly implemented and should be feature-complete in most platforms soon. I cannot explain how big of an improvement this language is. Javascript used to be a language that other people worked in and I refused to understand. I wrote some thing in it and dabbled when necessary but I was always amazed at how primitive it was for such a high-level language. It was usable though with a bunch of libraries to support you. ES6 makes most of that legacy obsolete.

However ES6 is a bit of a kitchen-sink language now. There are multiple means to iterate over a collection, there are classes, monads and functors... did I just say monads? I meant Promises. And did I say functors? I meant sequence types with a useful prototype. The point is that if you choose the right subset for you it's a decent language now.

HTML5 kills the notion that, "the web is only for documents!" The acronym has aged a bit and is not really descriptive of what HTML5 is anymore. Most GUI libraries and systems I've seen implement the interface in terms of a tree of "objects" with the root node being the Window itself. That is essentially what the DOM is now with the browser providing the run-time loop, input, etc. We have a rather rich array of elements to work with... buttons, input boxes, a rich layout model, 2D canvases, WebGL contexts...

Where it does still suck and where I think you might be getting frustrated is in the tooling. There isn't much of a standard library in Javascript save for the objects you're given. They all loosely fit together with little cohesion. It is quite frustrating to get a program started and take it all the way to something on the level of Gmail, Facebook, or Twitter. It's even more frustrating if your expectation is an environment such as Qt where you have standard tools, libraries, and all of that.

However with some effort and determination you can tame the beast. The part of the kitchen I find most effective is the functional programming side. I use Fantasyland compatible libraries and wrap other libraries with them. I've devised my own configuration of build tools based on Webpack, npm, that I can spin up with Yeoman. It's not great but it's tolerable.

... but now I'm looking into Bucklescript since I'm a closet OCaml fan... and that seems to be another popular angle for building "large" applications in Javascript: compile down from a more familiar language with the tooling you need.

Nothing is straight-forward. Not immediate-mode custom UIs; not big, fancy frameworks like Qt; and certainly not the web... but the web as a platform is awfully powerful, flexible, and open.

cdevs 15 ago 0 replies      
Currently at work someone wants to learn to create web pages and prototype his ideas. He asked me if he's ready because he's learning JavaScript and I had to reply you still need to learn html, Css, sql and a server language to do what we do how we do it. It's a shame so he moved on to some new site / page from mit that's allows drag and drop boots troop elements and drag and drop database logic like "users must be logged in". It's unfortunate there's not much of a middle grown between learning 5 things and drag and drop.
xorgar831 22 ago 0 replies      
I'd love to know too, are there any frameworks that are at least more straightforward than React and Angular? One where you're not passing anonymous functions into functions with all sorts of confusing syntaxes, where you can just express what you want to do without having balance three types of punctuation that require the shift key to type.
pjmlp 13 ago 0 replies      

It should have stayed as hypertext documents, just plain HTML + CSS, with everything else just covered by network protocols.

Instead it is a pile of hacks of trying to bend HTML + CSS + JavaScript to behave like native applications, but not quite, because the browser is in control of the L&F leading to yet another pile of hacks to make the already existing hacks to behave the same across all required browsers (including different versions of the same browser).

sidthekid 8 ago 1 reply      
I wonder if 50 years down the line, maybe when humanity is building spaceships to go to other planets, will the interstellar software be written in C++/Java or Assembly or be produced entirely by AI subsystems or what.
flushandforget 21 ago 1 reply      
I think what saddens me with web programming, is constant rewrites of the same old projects, that pretty much do the same thing. As a community we'd be better to focus on a few core APIs like a web shop or a booking app.

A church or school could have a common underlying built platform. Where functions of outfits are unified, we could drop in one size fits all solutions.

In England (UK) you have about 24 thousand schools these could be aided/driven by a few competing platforms. Charities and small shops likewise.

Platform constraints can also help. Having fixed html, perhaps would let designers just swap out CSS and imagery - job done.

Much web work is a brain drain, and a lot of good talent in my eyes is being squandered on petty engineering problems, when there is still a world out there that needs putting right.

bigopon 3 ago 0 replies      
Because it has to do something nothing could everdone before ? Unites the worl, provides collaborative environment. So it needs time to evolve. You will hate it less overtime
SimeVidas 22 ago 1 reply      
The web platform is disorganized and has many missing pieces. It has also grown quite a lot in the last couple of years, so its virtually impossible to understand all of it. As long as youre disciplined about learning from the relevant blogs, it will become better (but it may take months).
palerdot 20 ago 2 replies      
One thing that frustrates me as a front-end dev is the inability to settle down in an ecosystem. Every minute, new tool/framework is coming with a tagline "There is no need to do that like you did with X, Y takes care of it for you".

Now the Y might be webpack/React, tomorrow it might me something else. Whoever says React gives them a consistent way of doing things, they would have said the same thing to Backbone/Angular/ember/bower/grunt/less/sass/precss/postcss/ .............

Ultimately, it is about controlling your mindset and navigating through this onslaught of tools/frameworks in the front end ecosystem.

ankurdhama 22 ago 0 replies      
Any software, no matter what type, that evolves over time will become a series of hacks on hacks. The more the frequency of evolution is the more hacks will be there. Unfortunately the frequency of evolution in any web app is way way too much then other kinds of applications.
eksemplar 13 ago 0 replies      
There isn't much of a difference between web and application development in my eyes. Both should be build on a service backend, with a common architecture making different systems work together through APIs or MOX-agents.

In that world the "view" part of your system might as well be web based. Making front end look and feel good, is terrible in everything anyway.

sheriffderek 11 ago 0 replies      
I suggest you choose to fall in love with Ember.js. She is the prettiest girl in your small town and she's really friendly. Start calling yourself a programmer instead of a coder - and help move Ember toward being, not just a framework, but an SDK for the web. Everyone can complain all they want about CSS and how it's broken etc, but no one has come up with a better solution. It's not the dark ages... in fact, it's the best time in web development so far. Developers haven't had to be 'designers' in the way they are being forced to now - with variable screen-size, and alternate UI patterns for each. HTML in little dynamic templates, variables for CSS preprocessors, ES6, and modular JS patterns. Things are wonderful. +1 for a new mental paradigm.
buro9 22 ago 0 replies      
Everything is simple.

There is just a lot of it.

That's pretty much my view of internet and web technologies over time. It all did work, it all continues to work, to address security/performance/convenience we collectively add a few more little simple features/workarounds/quirks.

But ultimately the perception of the hackery of it all really stems from:

1. Quantity. There's a lot of stuff, it all works to some definition of "works" and there is typically more than one way of doing something.

2. Quality. When things are made, they are made for that time. As time goes by we can more clearly see the ambiguity of something, or the incompleteness of a feature, but by then it's too late and it's set in stone, our fix is usually to add something new (see #1).

nigelg 11 ago 0 replies      
This thread is just a big circle jerk of non web-developers hating on web development.

Minimize you dependencies, organize your code into easy-to-fit-in-your-head, single-responsibility modules. Write a simpler solution instead of including another 100kb minified mess.

Someone else said it, but I'll repeat it: systems scale, languages don't. Javascript can be as good a language as any if you use it correctly. People bitch about the footguns but don't take the time to design their systems correctly. Yeah, Javascript fucking sucks when you write 10k lines of incoherent JQuery-soup in a single index.js file that provides all the functionality of your shitty asp.net page from 2001. Well no shit? You can write garbage in any language.


ubernostrum 20 ago 0 replies      
Is it really that there's some exceptionally high amount of hackery? Or is it just different hackery than the kind you're used to and have so thoroughly internalized that you no longer see it as a pile of hacks?
Fannon 22 ago 1 reply      
Yes, the web is a very messy place. Maybe a kind of wild west of programming practices?

But it's also a place where you can do a lot of things that no one has thought before. There are not many rules and a wide diversity of approaches. The web platform never had many of those approaches (e.g. complex web applications) in mind when it was created. It works somehow, anyhow. It's chaotic, yes, but also flexible and full of freedom.

To stay sane in this world, you have to voluntarily and deliberatly (!) reduce this freedom and create yourself some small sane pockets that you understand well enough and feel comfortable with. This can be done by increasing the abstraction level and restricting feature sets (e.g. ESlint), using Frameworks (React, Bootstrap, ...) and transpilers (TypeScript, Babel, Sass). Note that you're loosing freedom here and you're buing into other peoples understanding how a sane place of web programming should look like. In the Web there are a lot of ways to do things, there's no monoculture! And if you don't like the existing ways, roll out your own (though I wish people would be more careful / sceptical with this attitude).

And there's the backend. You've got all choices of programming languages and frameworks there. If you're making a mess of you're backend, you really can't blame the web for it.

For someone without much web experience, this process of choosing frameworks, workflows, toolsets just to get to one (of many!) sane programming experience is surely daunting. You have to choose and configure your envirionment yourself first, just to get started. You really need someone experienced to set this up and understand most of its implications. If you're having so bad experiences with your current web project, maybe some bad decisions were made regarding this. Or too much freedom (and therefore chaos) was left in place and got out of hand.

If you don't have the experience to make those decisions, you could just start with one approach that is pupular right now. I guess on hacker news this would be something like React, Babel, etc.. There are a lot of tutorials out there to put this all together.

prawn 15 ago 0 replies      
It might be hack on top of hack, but I find it quite enjoyable when I'm completely in control of what I'm delivering. When I know what's reliable and what's dangerous, I can work around those limitations. Where things get particularly painful are when you are at the mercy of decisions made by a client or boss who won't listen to reason. Then it's hell.
crearo 22 ago 0 replies      
I felt the exact same thing when I started webdev after 3 years of app dev and a little bit of REST APIs (and backend) using python flask. For me JS, and all frameworks built using JS felt like attempts at revival of something that should have long died. Every new framework gives JS lovers (honestly no offence) a little bit of hope and adds a year or two to its survival. For a long time, I felt JS was a hack on top of a series of hacks!

I've just come to accept it now. The reason you're disliking it is probably because of its extreme hit and trial nature - unlike appdev which is more fluid and consistent.

z3t4 7 ago 0 replies      
The trick to web-dev is to avoid a "back-end" at all costs. Just make all your "data" available in human friendly HTML.
stevesun21 16 ago 0 replies      
As working on backend and front end for many projects for different size of projects over years, I would say 'yes' as my short answer.
jamez1 22 ago 0 replies      
I like to think of web programming like the english language, how it's a mashup of all these other languages and ideas. It's hard to learn as an outsider and has many gotcha's and wrote learning exercises
kharms 12 ago 0 replies      
As a non-web-dev, the hardest problem I've encountered is choice.

Which framework should I choose to do X? To do Y? Do they play together? Are they still supported? Are they well documented? What assumptions are made by them?

There are dozens of options for most things, but no guide to them.

tracker1 9 ago 0 replies      
I know there's a bit of boilerplate to learn, but if you stick to React + Redux + Fetch using Babel and Webpack, you'll have a much easier time of it overall.
segmondy 21 ago 0 replies      
Nah, you are not missing anything. You are not alone, but you are also resisting change because you are not use to this fast pace of change. The reality is that you need really great memory and ability to organize and discover information fast to make sense of todays applications. It's layers upon layers of abstraction. It's terrible in a way when you have to work with others you have to deal with it. When you work by yourself, just keep it simple, choose a few well proven and solid stacks and just stick with them.
popopopo 22 ago 0 replies      
weird. commenters seem to be either new web devs, or non-web devs at all judging from comments and cries.

web development is as hard as any other development environment. you must know a lot of stuff, hacks ARE NOT mandatory at all and it is not as bad as people tell you.

maybe you just work with terrible base code is the answer?

palerdot 20 ago 0 replies      
One important thing is a final web page is a confluence of code coming from different sources, and not controlled by the end user or the developer/website. If you define some functionality, I could just override (intentionally or not) with my code which also gets loaded along with yours.

Combine this with the inconsistent browser playground, you might get some perspective of the hacky nature of the workings in the front end world.

hellofunk 16 ago 0 replies      
true, unless you look at incredible new ways of UI design like React and its Clojurescript counterpart, Om and others. FRP and similar concepts has so dramatically changed how I think about software design that I now use it for most of my native C++ projects as well, or at least, I get as close to it as I can.
plg 14 ago 0 replies      
Isn't everything? The older I get the more I realize that all of the orderly systems I thought governed life, society and the universe are in fact a system of hacks and bag of tricks. Sure there are rules. Except when there are exceptions. And on it goes.
bikamonki 13 ago 0 replies      
So what exactly are the front-end stack haters proposing as an alternative to hack-on-hack? Should we just dev/maintain N code bases of native apps to run on every OS and then somehow connect them?

Haters are missing the big picture...

Kaizyn 20 ago 0 replies      
Have a look at Elm. That looks like a fairly promising alternative to some of this mess. I don't think you can get away from CSS and HTML5 though.
wepple 14 ago 0 replies      
my biggest realisation of this was when reading the opening chapters to Michel Zalewski's Tangled web [1]. He does an excellent brief intro to how we got to where we are, warts and all.

Things like content sniffing where a browser can't work out what type of file it's been given, so has an algorithm to take a guess and render based on that are what we've got to deal with.

[1] https://www.amazon.com/Tangled-Web-Securing-Modern-Applicati...

p333347 15 ago 0 replies      
From my experience, it is, especially in front end development when you must have cross-browser support. For me the term cross-browser support itself is quite amusing and nonsensical given that there is supposed to be a standard.
ionised 12 ago 0 replies      
As primarily a back-end developer I am being exposed to some front-end work at the moment with AngularJS/CoffeeScript.

I have to agree with you. I'm not enjoying it at all.

peter_retief 23 ago 0 replies      
I agree, its way more complex than it should be, probably something to do with the browser wars and propriety software battling to add barriers of access
shurcooL 21 ago 0 replies      
I agree, and I decided I won't accept the hacks and compromises anymore, and started building everything in Go (even frontend stuff) in my free time. There's much to do, but at least the foundation (type system, type safety, etc.) is very solid.

This way, I don't have to build on top of the hacky and messy things anymore, but slowly take my time and do things very right.

avisples 13 ago 0 replies      
Application development on a web platform meant for documents is inherently a hack, but the evolution of the ecosystem is reaching a point where many of the hacks are quite good. There's just a lot of inertia from existing codebases and developers used to the previous ways of doing things, and FUD from places like Google with Angular and Polymer.

Web development seems to be particularly suited to the model of building a hack, then pouring concrete over it, then building the next layer of hacks on top.

saosebastiao 22 ago 0 replies      
Not gonna comment on most of this, as I'm right there with you. Web development is a gigantic shit sandwich. But I have to at least respond to this:

> I'm not even talking about the fact that everything has to be stateless, in fact I develop desktop apps as stateless even driven UIs as well,

No, you do not. UIs are state machines (not like state machines, they actually are state machines). It is impossible to have a stateless interactive UI. If it is stateless, it might be a web page or document, but it is not a UI.

Any attempt to make a "stateless" UI will fail because of this impossibility. What many half-baked frameworks will attempt to do is make them as stateless as possible, which is a recipe for disaster, as they can't actually get rid of the state, they can only move it to some location where it wasn't designed to store state (Routes? Cookies?), or to some location where the semantics and comprehensibility have been compromised. In fact, this statelessness is precisely one of the major problems with web programming...you're trying to bolt something inherently stateful onto a format that was designed for statelessness (HTML was created for documents, not apps).

Programmers in general, and UI programmers in particular, need to get over their fetish for statelessness. Sure, modeling a stateless problem with stateful code is ridiculous, but if you try to model a stateful problem with stateless code you are going to have a much worse time. Modeling state is hard...don't make it harder by pretending it doesn't exist.

dreta 18 ago 0 replies      
HTML and JS are bad, but you can reduce them to a basic syntax that you can work with. CSS on the other hand requires hacks to perform the most basic operations like positioning an element relative to another element or centering an element inside of a container.
paulftw 21 ago 0 replies      
Frontend always was and always will be harder than backend, regardless of the platform/framework etc.Yes, the fact that HTML / CSS is a technology designed in a different era (slow keyboard+mouse desktops) for a different purpose (displaying static hyperlinked documents) doesn't make life any easier.
35bge57dtjku 21 ago 0 replies      
> Is web programming really that bad? Is it really just that I need a new mental paradigm?

In the sense that there's 1000 web frameworks that all put their own shitty spin on everything, yes definitely. OTOH it shouldn't be hard for you to improve on those things and release web framework #1001.

chunkyslink 21 ago 0 replies      
This is a good resource in terms of 'getting your head into the space'.


Not aimed at beginners but it made me think a lot more about how complex this can actually be then a set of related technologies.

patsplat 14 ago 0 replies      
You are resisting change. User experience code is different from backend code. It is often a pile of incomplete abstractions and device specific hacks.
gvilarino 14 ago 0 replies      
Programming is just a series of hacks on hacks.
mathgenius 19 ago 0 replies      
About 15 years ago I made the conscious decision to ignore web programming entirely, in the hopes that in a few years things would settle down and get some sanity. Apparently this has not happened.
GoToRO 21 ago 0 replies      
It's the same like any other open source project: it gives you 100 ways to hang yourself and maybe only one way to do it right. Your job is then how to find that one way.

Frameworks? use them when you need to deliver crap, fast! :)

godzillabrennus 22 ago 1 reply      
Yeah it is. Django is a good example of a framework that is popular and well documented overall. Yet when a new Django revision comes out the books and documentation from third parties take months to follow on. So by the time I've learned all the major changes in a revision well enough it's already party over for that revision. Official support is just ending because they have a new revision out. Unless it's an LTS build but that means there is a whole lot of new stuff in these non-LTS releases.

I for one would prefer to have Django and other projects abandon the minor revision numbers like 1.8 and 1.9 in favor of what Asterisk did and call them what they are. Version 8 and Version 9.

That'd make it feel less hacky and if done right they could encourage longer support cycles for these major version releases.

realworldview 22 ago 0 replies      
You are not crazy. Many, many people have come before you and asked the same. The reply is always the same. Yet the craziness continues, it multiplies and it leaves nothing in its wake. Nothing stirred in the embers.

And the DOM was.

justifier 19 ago 0 replies      
where does the hacking end?

i see using an electron passing over an elemental substrate as a hack of electromagnetism to allow its properties to represent arithmetic logic

i see little endian as a hack of binary notation of sets to be able to compose information

everything you do is a hack on top of a hack.. on the shoulders of giant stacked turtles.. or some such

what about web development sucks for you? in recognising them do you have any ideas for how to relieve your pain points?

web development is the same as application work.. solving problems

the_common_man 21 ago 0 replies      
I think any programming model that's been around for a long time is complex. Backward compat is the devil. Take OpenGL for example. All the compat stuff has made it practically impenetrable.
BasDirks 21 ago 0 replies      
HTML, CSS and JavaScript are improving. Your experience as a web programmer depends on the browsers you are working with. If your clients include IE6 users, your life is going to be worse.
bikamonki 22 ago 0 replies      
If you've been codign "since before the web", then you should be able to see the whole picture. The browser is the new VM. Horrible hacks are necessary to test ideas and move forward new paradigms.
zebraflask 13 ago 0 replies      
That's a colorful way to put it, but yes! Of course it is. That's what makes it fun.
jaunkst 22 ago 0 replies      
Its very, opinionated. It has to be! (for now)

I can agree with almost every opinion in the comments, almost everyone is right. But with a strong opinion and a strong mental model there is light at the end of the tunnel.

The future is bright for web applications, and almost everyone in the space is aware of the biggest issues, which is important as the browsers adapt new features to help ease the pain.

Web development is a scary place but it can be enjoyable when the right pieces are in place. Older web applications have crazy hacks and made up anti-patterns to solve problems, which mix context between the client and the server making it a nightmare to wrap your head around or even implement new features.

Often a new feature in such application guides the developer to accept the fate of adding more technical debt, and creates a strong desire for a better way with no way out without a major overhaul of the backend and frontend. I have spent countless hours building patches to older systems just to prepare them for the option of pivoting to more modern approaches.

Today web application development is a fast moving target. Design patterns are changing from framework to framework. Even from framework version to version. i.e Angular 2.

It's almost as if the current state of frontend development is very comb shaped. broad in approaches, and that the community is digging deep into patterns that are showing success in scaling, and performance. We have to deal with various topics, the lack of concurrency, performance of the DOM, managing scope, and state.

I have a few opinionated methodologies to help me in modern web development.

1. Pick a strong frontend and backend frameworks and know them well.

2. Don't mix the backend and the frontend code. Keep the backend API in context to the business domain, data validation, and security. Allow the client to be an independent consumer of the API for portability and scalable distribution.

3. Keep your JSON responses as flat as possible, and avoid deeply nested data structures. Rely on functional programming to map and reduce your data on the client into deeply nested structures if needed.

4. Decide what the client can compute for free computation cycles.

5. Stay as data-driven as possible. Fall back to the server or micro-service if the client is not efficient at a demanding task.

6. Choose libraries with the least restraints and high flexiblity. They should not obfuscate or complicate your ability to implement the design. I find most libraries can assume to much control.

We are in a better place today then we have ever been for web applications. Though the learning curve is intense and the subjects broad. Especially for fullstack developers. I feel that finding what works and an opinion of how it should be done is important.

I am less picky about the backend technolgies as I am with the frontend. I would really only consider Angular, or React for my frontend. Both Angular and React expect you to form a mental model of how they work, and what a build pipeline should look like which is very project specific in my experience.

Its the wild west our here, and expect things to continue to change. Building an opinion, vetting new libraries to add to your toolbox, and experimenting is just part of the web application world.

cureyourhead 22 ago 0 replies      
We are all Windows programmers now.

The web is really just one enormous operating system we're all just hacking on.

But it's only slightly better then this but not as clean as Linux. W3C sort of plays the role of Torvalds

hmans 21 ago 3 replies      
It's been ruined by a generation of developers who believe it a good idea to build stateful applications on top of an inherently stateless document-centric infrastructure.
sboselli 15 ago 0 replies      
You sound like a good candidate for something like Elm (elm-lang.org), with its Elm Architechture.
solidsnack9000 23 ago 0 replies      
It is the amazing architecture that integrates those hacks, though.
mruniverse 20 ago 0 replies      
It is but don't worry about it. It's getting better by the hour.

Just think about this: Has it ever been easier to reach so many people with so little effort?

gotofritz 8 ago 0 replies      
Yes, it's you resisting change.
robbyt 21 ago 0 replies      
Yes, it sucks. So how do we fix it?(In perfect world, how would you reinvent the web as an application platform...)
kelulon 17 ago 0 replies      
Yes, it is. That is exactly what I have found. It's just insanity. I can honestly say Javascript made me cry today. It's not just you. There is a better way.
ktRolster 22 ago 1 reply      
Web programming is ok. A lot of the complexity comes because it is actually two different problems:

1) The problem of displaying a (mostly static) page of HTML

2) The problem creating an application

There are web frameworks in existence that solve either of these problems, but things get ugly when people don't think about which problem they are trying to solve.

exabrial 22 ago 0 replies      
Yes. And while HTML5 brought a lot of awesome features, it also created another set of problems, the least of which, is the syntax is impossible. There are 100 "right" ways to do things now, when in fact, a language should specify an exact way of doing something.
duncan_bayne 23 ago 0 replies      
I think all programming is, but Web programming is _particularly_ that way.

The least bad stack I've ever used is Reagent ( https://github.com/reagent-project/reagent ) - a Clojurescript library for React. Perhaps that's just _adding_ layers of hackery, but I found it made sense.

joelbondurant 22 ago 1 reply      
HTML5 seems significantly less advanced than Java AWT was in 1997.
gruzilla 14 ago 0 replies      
I have a a very similar background as the OP.

Also seen/worked on projects that are a mess and devs there built hacks upon hacks to keep everything up.

I also felt like I am stupid (besides studying software engineering and working in the web business for 15 years) or I miss something. But then I also had the privilege to work with very skilled people and get a different perspective.

Here comes my argument:

I argue that most projects that went to be a mess have been set up by people that had to work with incomplete information or insufficient time to conquer the stated problem. So I project the question "is-technology-the-problem?" to "is-the-team-the-problem?".

In my experience much bad influence - that create messy projects - comes from the lack or the way of communication between technical designers (who say whats possible), developers (who say how its possible) and other stakeholders (who normally "just want something"). I think of a situation here, where I had to work with a sales guy who proudly sold "rapid development" and "agile iterations" without understanding the technical or management perspective of true rapid development.

When it comes to making design decisions (which WILL influence the "messiness") the web is full of different approaches, technologies and so called "best practices". If you're a designer of a "will-become-big"-project it is difficult to make those decisions based on this variety of solutions (which as the OP stated almost everytime suck after some months). The fact that every framework presents itself as the best and most versatile does not help at all.

My best practice to go out and talk to people about my problem and not ask the internet. Its others people experience you only can access in a discussion, because normally you don't and cannot know what information you lack and therefore ask superficial questions on the web and thus get superficial solutions and have to conquer previously unexpected problems in long-term.

Another argument I want to make:

If you were a carpenter and would have to build the interior of an opera you would not go to the web, google for a month and then think you have exhausted all available resources and now you are ready to build that opera interior.The ubiquity of "quick solutions" make developers believe there are no long-term-effects of such decisions and thus most such small decisions never get discussed.If you have worked in teams in other branches (building digital arts, building a house boat, stuff like that, where you MUST have a team) you get the point of what I am saying. Its only computer science where people stop talking because they think everything is clear to everybody.

About your question about orientation:

I suggest getting aware of the high level concepts of full stack web development and truly understand the concerns every layer tries to attack. Web-Development - like every other software engineering discipline - is all about Devide&Conquer.N-Tier development (one approach to D&C) is nothing new, but the semantics of web development are new. A good designer has to speak those new semantics fluently. It also helps getting a good feeling about what actually is a "best practice" and what is just sold as such. There simply is no universality to web programming as there is none to other software engineering disciplines.

I gained a lot of confidence in knowing about the classification of problems and how you would generally combine them instead of building a big hashmap of problem -> web-tech-framework (This also reminded me of some complexity courses I took in my studies). Giving clear semantics to different parts of your application and discussing those layers using natural language also reduces your teams vulnerability to total chaos and prepares for unexpected changes of requirements.

Further I learned from experience that its often the time-constraint that promotes messy code that never gets cleaned up because the project somewhat dies a slow death, which in my eyes is just a reminder that web-tech is something new to the society as a whole.


Thus I developed the following perspective: I see myself as a moderator of language and problem-awareness. I often argue in front of customers that if you describe the project as a map of the problem domain there are A LOT of blank areas and its our teams effort that will unveil/debunk/uncover those blank areas. I also point out that there are a lot of semi-blank-areas on our project map. I for example know how agile development looks like that does NOT generate a hack-upon-hack architecture but the others don't. On the other hand I have no knowledge whatsoever about interiors of operas (to reuse the example from above). Its that explicit merge of information that prevents a projects structure going astray.

naranha 22 ago 0 replies      
Are you talking about the client or server side?
jimjimjim 20 ago 0 replies      
house of cards.

with each card being the flavor of the month provided by an external source.

it's almost enough to make me want to go back to activex.

unclebucknasty 15 ago 0 replies      
Damn. If I didn't know better, I'd have thought I'd written this myself while in an Ambien-induced fugue state.

This is exactly my feeling and much my own history. I think the intensity of your pain can be felt most acutely by those who once knew a saner world of software development.

For those who came of age in this era of Javascript hacks, framework of the day, standard of the week, and separate open source tool for every single task an app must perform, I think it is simply normal.

I say this because after several years applying my craft to my own business in the manner of my choosing, I have recently returned to Organized Development Land. When I read the code or a module is explained to me, all I can think is "are you effin' kidding me?" But I look around and everyone else has a straight face.

If you've stayed in the industry during this evolution, you have probably had moments of frustration or confusion wrought by this change, but have now had a full WTF epiphany--likely induced while simply trying to get something done for the hundredth time, that should've been relatively straightforward.

Mainstream software development is no longer about logic, algorithms, creativity, and design. It's about trying to glue together a hodge podge of disparate crap and trying to make it work. And, for the artisans of old, it can feel like soul-crushing assembly-line work.

gjolund 10 ago 0 replies      
In theory, no.

In practice, yes.

emodendroket 14 ago 0 replies      
It can be OK, but yes.
keithnz 21 ago 1 reply      
The web world is just a new world of different problems. One of the most interesting things about this world is there are a LOT of participants. A big part of the web world is diversity, it's kind of like moving from the country to a big multi cultural city. Many many many ideas are being thrown around. Finding cohesion between ideas is tricky. Being a learner in this world is bewildering.

Understanding the browser is very important, perhaps start with http://www.html5rocks.com/en/tutorials/internals/howbrowsers...

If you are a good coder, javascript can be awesome. Put a lot of time into understanding the language. Don't stray into variants like typescript or coffeescript or elm or anything else till you are pretty happy with js. Prioritize learning ES6 over any variants. The bulk of information on the net and libraries, etc is standard js.

Get a good understanding of webserver, HTTP / Web sockets. Sniff packets and also understand HTTPS.

Invest a lot of time into HTML and CSS, there's a lot of advice on how to build your own CSS frameworks from the ground up, this is really worthwhile. But also spend a bunch of time with something established like bootstrap ( or any other UI framework ) so you can see what problems frameworks are trying to solve.

Language? Frameworks? This is where it gets tricky. I suggest understanding a Node stack, as it's popular, and a lot of examples use it as a backend. It may not be what you actually end up using. Checkout Angular2, React / redux as they are popular javascript frameworks that run in the browser to deliver application like UI. However, go for statically generated pages if you don't need that kind of UI, classic GET/POST delivered webpages still deliver a lot of value.

Security / Authentication - Can be very tricky and in some environments it's left to roll your own

Data - Can be super convoluted, often taught in a web context without much concern for security and authentication (depending on stack). In general avoid having too many layers between your data store and the UI. SQL / NoSQL / BigData Stores are all toys to play with (but each data store tech has its own problems and tradeoffs) and more often are getting mixed together.

Now, because you can pick and choose nearly any aspect of the above, it can become very hackish, especially as new toys are coming along all the time.

If I was going to recommend a single thing to start playing around with? probably meteor. It packages up a lot of modern web things for you, it's all javascript, it uses a mongo back end (which is a json store, not necessarily the greatest choice of DB though), has a easy package system, and supports a number of popular front ends. None of which is how you should choose a production stack, but it can be a good way to get started.

ilaksh 22 ago 2 replies      
My take on this is that backend developers have always been at odds with frontend developers in terms of being given larger salaries than frontend while not having to keep up with new UI technologies and simultaneously downplaying the skills of the front end programmers.

So now, when you have to learn about the web platform since you just cannot ignore it anymore, you are feeling pretty overwhelmed, and can't help yourself -- you fall back on what you know, which is to shit on the skills of front-end developers.

I say this as someone who has done front, back, database, ops, on web-based and desktop stacks.

andrewmcwatters 12 ago 0 replies      
The cleanest and most efficient methodologies for web development today are largely unpopular.

The people who know how to write efficient websites, web pages, and web software in general are going to be either the people who have been doing it long enough to remember the old ways, or those who wade through enough of today's bullshit to understand how to do things with less code, and faster rendering times.

justaaron 14 ago 0 replies      
tempodox 15 ago 0 replies      
Yes, very much so. And everybody is too busy making money to go back to before all those wrong decisions and apply the knowledge we now got from hindsight.
transfire 15 ago 0 replies      
I was thinking about this the other day, and one possible way to improve the situation is place a hard separation between web documents from web applications. Currently we try to shove both capabilities into a single paradigm (stack). But the two don't mix well.

What might that look like? Ultimately a much more elegant HTML and simplified CSS for web documents, and quite likely no HTML for web apps -- the Javascript and CSS would merge into a GUI-oriented language.

craigmcnamara 22 ago 0 replies      
Nailed it!
forrestthewoods 22 ago 0 replies      

Whoa. Betteridge's law doesn't apply here. Weird!

Ask HN: Any nicer alternatives to Mint for personal budgeting?
12 points by newsisan  9 ago   13 comments top 9
mordocai 6 ago 1 reply      
I like YNAB, and personally I like the SAAS version as I found having to sync via dropbox annoying and I'm a linux user so having to run it in wine was also annoying.
geoelectric 3 ago 0 replies      
I'll join in with recommending YNAB, with a caveat that it's really an opinionated methodology encoded into software, and the main benefit IMO is from the methodology. A comparison might be OmniFocus vs. GTD.

I haven't used the newer web-based version enough yet to know whether you can really roll your own system on top of it, but I suspect you'll find path of least resistance is to do it their way. The good news there is that they explain their way very well, with lots of supplementary material available.

Jtsummers 8 ago 1 reply      
What else have you used and what are you looking for? Specifically, can you list features (essentials and nice-to-haves).

Do you want it browser based? Standalone - mobile, desktop, both?

Does it need auto-import of transactions from your financial institutions?

Do you need budgeting or accounting or both?


I've used Mint for a long time, I like them for tracking my accounts but never quite got the hang of using it for budgeting.

I liked YNAB (standalone) for putting my inflow/outflow in terms of a monthly view, and their general financial philosophy is really good for people trying to get out from under debt (even small amounts) and move towards being more financially stable. It's useful if for nothing other than that. Their reports were also nice ways to view my money over time, to see where I could cutback on spending to make room for savings or other planned spending. It doesn't do auto-import, but does handle importing CSV files if you can download them from your bank/cc company. Other pros, it works on mobile and desktop using dropbox as the syncing mechanism. This is nice since that means syncing isn't tied to YNAB (though does require Dropbox to continue operating, safe for a few more years I imagine).

I tried their web version and was left dissatisfied. Lacked reporting, but gained auto-imports. So tradeoffs, also cost $5/month (discounted if you pay for the whole year).

I like ledger as an accounting tool, but I haven't got the hang of its budgeting mechanism. It's a CLI tool, but uses a plaintext file for managing your transactions. ledger-mode in emacs is solid, and it plays well with org-mode. I won't say this is "nicer" than Mint. It is, however, a good bit more powerful. It's a full-featured accounting system that's fairly approachable for programmers (IMO). There are some variants like hledger which are mostly compatible, but also offer some extra niceties like a self-hosted web interface.

I tried GnuCash, but found its interface on OS X particularly unpleasant and buggy so I didn't get far. More feature complete for accounting, I did setup budgets and thought I'd like it. But, again, the glitchy interface on OS X drove me away from it before I got far enough to really decide.

nvarsj 5 ago 0 replies      
Another vote for YNAB! I've been using it for a few years now without regrets. It works internationally as well :). I used mint for a while but found it limited and buggy - it served mostly as an aggregate feed of my various accounts in the U.S.
bbcbasic 1 ago 0 replies      
YNAB 4. Not the cloud version because it has no transaction import (!)

Once they desupport YNAB4 maybe time for me to create OSS version ;-)

aeharding 7 ago 1 reply      
Any chance you could check out my side project, Financier?


I just recently launched, so there might be rough edges. It's almost feature complete, though. It's very similar to YNAB 4. It's $12/year with syncing. No signup is required and no internet connection is required -- it syncs when you have a connection. Mobile app to come!

I would really appreciate any feedback. :) For the next week, I'm giving out the first year for free (just email hello@financier.io or PM me on reddit).

I have a recent Reddit post with more info here: https://www.reddit.com/r/ynab/comments/527wiv/ynab_alternati...

Thank you!Alex

j_s 9 ago 0 replies      
YNAB has been recommended as more pro-active rather than monitoring Mint-style.

They have transitioned to SaaS but it looks like you can still get v4 on Steam.

Gelob 4 ago 0 replies      
YNAB and I just heard of an app called moneylover
mixedCase 5 ago 0 replies      
What is the best advice you ever received?
6 points by Mendenhall  4 ago   1 comment top
paulcole 2 ago 0 replies      
Basically that any advice you receive is going to be just plain wrong.

Turns out it's true! People extrapolate advice out of their own unique circumstances, base advice off nonsense they see on the news, or just make things up to sound smart, just to name a few problems with most advice.

Think honestly and critically about the next piece of advice you give/receive.

Ask HN: How to you browse, store, sync, and backup your family photos?
7 points by stevesearer  11 ago   4 comments top 4
amerkhalid 9 ago 0 replies      
I use Lightroom for viewing, organizing, and editing photos. I have local NAS for backing up entire drive.

Then I am using SmugMug for cloud backup. It let me create private albums that I can share with anyone. I can easily sync photos on SmugMug with Lightroom.

(Lately, I am thinking Backblaze should be better option for me. I can share photos on Facebook and email full resolution photos to anyone if they want.)

ramon 11 ago 0 replies      
Nobody wants local copies anymore, Google Photos is the solution really.

But if you want there's also OneDrive, Dropbox and the likes that keeps a copy in your HD if you want.


msh 9 ago 0 replies      
Depend on what mobile eco system you use.

If you use iphone/ipad and mac/windows icloud photos give you more or less what you want.

The photos are offline on your computer, available on demand from you devices.

smt88 11 ago 0 replies      
Whatever you use, I strongly recommend backing up to more than one cloud and also having a local copy of file history (Time Machine on OS X, FileHistory on Windows).

For the second cloud, you might want to look into BackBlaze.

Is Vue.js a save choice?
3 points by koehr  17 ago   3 comments top 3
afarrell 15 ago 0 replies      
A framework is useful because once you learn it, you can apply that knowledge across a wide range of projects. Not only that, but once there is intro documentation for it, the knowledge imparted can help people be several miles down the road of understanding the structure of a many projects. For this reason, the biggest thing I look for in a framework is solid canonical introductory tutorials that help someone build a solid mental model of the framework. This means that even if the number of developers is currently small, it will grow fast enough that I won't worry about hurting my ability to hire down the road.

It is especially useful if the intro tutorial teaches automated testing. Then I'm going to be less worried that tests are an afterthought rather than something that is written alongside the feature.

saluki 1 ago 0 replies      
It's a pretty safe choice, Evan is working on it full time and it keeps getting better and better.
jbardnz 14 ago 0 replies      
I really like VueJS and I actually think it is a pretty safe choice. While it has been gaining a lot of momentum recently (especially in the Laravel community were it has become the default frontend framework), it has actually been around for well over 2 years. Evan talks about the stability of the project more here: http://blog.evanyou.me/2015/10/25/vuejs-re-introduction/

Another really important point is that Evan is able to work on this fulltime thanks to a really successful Patreon. This is super rare for a open source project but pretty much guarantees support for the project for the foreseeable future.

Ask HN: What are most inherently secure OS's and why? The opposite and why?
6 points by marmot777  22 ago   5 comments top 2
seanwilson 15 ago 1 reply      
This will rank up there as the most secure:

"The world's first operating-system kernel with an end-to-end proof of implementation correctness and security enforcement is available as open source."


Ask HN: Resources for software managers?
4 points by devmgr  13 ago   2 comments top
SnailWizard 12 ago 1 reply      
I'd be interested in at least a list of references to read, listen to, or watch.

I've moved into management over the past year or so myself, and while I have one small team I'd like to make sure I have similar online resources for management like I do for developing software. I'd like to make sure I'm a decent manager and stay a decent manager for my employees.

Ask HN: Hacker news for machine learning and/or deep learning
7 points by pinouchon  16 ago   3 comments top 2
billconan 11 ago 1 reply      
this place is more focused on machine learning


Ask HN: Have you ever been hurt by a lack of privacy?
9 points by marmot777  23 ago   19 comments top 7
Red_Tarsius 13 ago 1 reply      
> Are there material ways that this lack of privacy hurts people...

In the safety of your own privacy, you can let go of common expectations. Being constantly recorded introduces a huge stressor, no matter how virtuous you are. You can't let go of past mistakes because other people certainly won't.

Lack of privacy in overcrowded prisons does kill people, mostly out of desperation. Convicts get extremely violent when their physical AND mental space is not respected. I believe privacy to be as important as any other needs after basic survival. http://www.npr.org/2016/03/24/470824303/doubling-up-prisoner...

> ...or is it more anticipation of future harm?

"If you give me six lines written by the hand of the most honest of men, I will find something in them which will hang him." You're not human anymore, you're a walking narrative: a commie under McCarthy, a heretic in Renaissance Italy, a witch in 1597 Scotland, a queer in the Middle East. Ambitious people protect their privacy because they know anything can be turned against them. Authority lives and dies by mud-digging and scandals.

sfrailsdev 12 ago 1 reply      
Yes. First of all people don't record or search information not to use it. Second of all, surveillance doesn't have to be used to stifle dissent, it's very existence does so.

More broadly a lack of privacy creates risks for people like rape victims, people fleeing domestic abuse, the LGBT community, women's rights activists.

I'll pull a few links for the US, but remember, surveillance isn't just an issue in the US. Think about China and Russia.




marmot777 4 ago 0 replies      
And as if on queue this article shows up on HN: http://www.theregister.co.uk/2016/09/12/turn_off_location_se...
mstolpm 12 ago 2 replies      
That's a broad field. I might not even know if some data collected about me leads to a higher price when looking for a product or a flight on the internet. I don't know what the immigration officer or the police may find on record about me when checking my data. An insurer might have given me a less favorable tariff without my knowledge based on some data about my driving experience, my hobbies or my health data. And so on. It is not that you know every time you're screwed that you were screwed ... and even less the reason for this.

On the other hand, somebody collecting data about you always results in an uncertainty: The data is potentially stored indefinitely and you don't know where the data might end and who will use it (potentially for his benefit or against my interests) at any point in the future. There are examples of data collection even with a good intent that ended catastrophic. Currently some Turkish citizens and even academics and journalists fear that they might be arrested just for communicating with the "wrong" people in the past.

At least, you have always to assume that collecting of data, monitoring, thighter security and reduced privacy are never only "for good", especially not for the individuals, but more in the interest of government, corporations, political parties and so on. And you never can go back and demand that your data is deleted: The biggest problem is that you don't even know who stores what about you. Combine that with all the data that is collected about you every day: where is your phone located, whom do you call, mail, chat with, what internet pages are you visiting, what apps are you using and where, which photos are you sharing and where and when we're they made, what products are you looking for, which shops are you visiting, which terms are you googling, what are you posting to HN .... lots of reasons to freak out if all this data points fall in the wrong hands.

endswapper 15 ago 1 reply      
If you start with an introvert, in the context of online privacy, the simple lack of privacy could be a significant barrier to participation. In a "connected world" this barrier has the potential to affect major parts, if not every part, of your life.

For example, avoiding social/professional media, i.e. Facebook, LinkedIn could have a material negative impact on your life.

marmot777 14 ago 0 replies      
I'm puzzled why this interest in the topic hit me all at once like a ton of bricks, whereas 6-months ago I didn't think much about it at all. For me, it's been binary. I'm doing some catch up. :-)
nikbackm 19 ago 1 reply      
I don't know.

Plenty of people can look at my data and based on that take actions against my interests without me ever learning about it.

Ask HN: What to look for in a job candidate's GitHub profile
5 points by noaclpo  17 ago   6 comments top 6
guessmyname 15 ago 0 replies      
Considering how easy it is to fake commits with Git, Mercurial, and maybe others I wouldn't trust must of the information provided in a GitHub profile. You might get a vague idea of the contributions to other projects and the preferences of the coder for coding standards, language, tooling, and silly things like that but don't expect anything serious, as other user commented: some of the best candidates work full time on their company's private repositories. I would also add the fact that some companies have clause in their contracts stating that all code written by the employee during his free time (aka. side projects) is to be owned by the company, I had this clause in my contracts and that is why my GitHub account only hosts experimental projects, nothing serious that I would want an employer to consider in order to offer a position in their company.
awareBrah 16 ago 0 replies      
It's quite hard to gather anything of importance. You have to remember that some of the best candidates work full time on their company's private repos. If they do have their own projects, they might be using a diff VCS. Either way, there are too many variables to make a github have any warning signs, but it's a good data source along with everything else to get a better idea of a candidates background.
mooreds 17 ago 0 replies      
* Do they have a github profile?

* Have a conversation about what is in it.

Don't expect a github profile to be professional class code. Sometimes it is just a playground.

So to me it is just one more data source to learn about a candidate.

probinso 7 ago 0 replies      
If they have a project that they list on their resume that is also on their github, then take a quick look. Just enough to decide if you can ask them questions without getting their input first.

Also, if they list a bunch of languages, but they don't have examples in those languages, then have questions about that. (there aren't very many polyglot shops)

Remember, to become a rockstar cpp programmer https://github.com/avinassh/rockstar

mrits 13 ago 0 replies      
I was the original programmer at my startup. 7 years later I'm the chief architect. I've had very little time to contribute to open source projects. Any kind of creativity itch I have I can funnel into our product somehow. It would be very upsetting to me if someone got a bad vibe from my low activity on github.
ig1 10 ago 0 replies      
You're approaching hiring from the wrong angle. You're looking at evidence and letting that decide what you hiring criteria should be, when what you should be doing is the exact opposite.

Start with writing a set of criteria for the role you want to hire and then measure the evidence against that. So for example if you criteria is "writes well commented code" you could use the candidate's code on github for evidence to support that (although a better approach would be to evaluate a work-sample test).

Ask HN: Has anyone here successfully applied to Stripe Atlas?
50 points by anacleto  2 ago   29 comments top 9
noodles23 2 ago 4 replies      
March 5th - We signed up to the waitlist the instant we heard about it

April 8th - Received an invite. They gave up a form to fill out online where we had to upload some IDs and other details.

April 10th - The docusign (digital signature) email documents came along with a legal/tax guide. We filled that out on Apr 19th.

We ended up delaying for a while discussing the tax implications since we're moving from a low tax (Hong Kong) to much higher tax (Delaware C-Corp) area. Unlike Hong Kong, taxes in the US appear much much more complicated and intimidating. Ultimately for our startup, we weighed the benefits and decided to go ahead.

May 16th - Decided to go ahead with the incorporation and signed all the forms (via docusign)

May 17th - Get 15k AWS credits emails (super cool)

May 19th - Our Stripe payments account was opened "You can now accept payments via Stripe" Email

May 19th - "Welcome to SVB Bank" email with login details

May 25th - "Your Company is now incorporated" w Certificate of Incorp attached

June 4th - "Your Company now has an EIN", which a number ID to file taxes

June 21st - SVB Bank asked us to print out a few docs to sign. Basically to confirm we received the EIN.

And that's it. In most cases, it only takes a few days once you've signed the forms to be able to start taking payments via Stripe US (so you get the cheaper Stripe US fees rather than the more expensive international fees).

As an international, we ended taking a while to decide if a US incorporation was the way to go. There's 2 reasons we hesitated:

1) Stripe released a beta in Asia where you can accept payments in many Asian countries. No more Braintree/Paypal crap so you don't need to have US bank account to use Stripe and the Stripe API.

2) American taxes are pretty high (compared to HK), and there seems to a lot more rules and paperwork required.

For us, what pushed us to go ahead despite our reservations was that we spent 1 week in SF (for our YC interview). We didn't get in, but we scheduled a lot of meetings while we were there and we realised if we were to raise any sort of significant funding, a Delaware C-corp is a prerequisite.

ryanol 2 ago 0 replies      
I applied in August and was accepted in about 2/3 weeks. They were in beta at this time and were very helpful throughout the entire process. All I had to do is enter information onto the forms they provide and they do all the work behind the scenes. Personally, I'd recommend Atlas to foreign startups looking to incorporate in the US, rather than US based startups looking to incorporate. They only offered C-Corp at the time of my acceptance.
pradipmj 2 ago 0 replies      
Yes , we received an invite couple of weeks back. Once you fill in all required information , it takes a about 7 to 10 days to complete the process and you'll also get 15000 $ worth of AWS credits
bastawhiz 2 ago 0 replies      
I have. It took about six months before I heard back after initially signing up. After that, it took about three weeks to get through the paperwork, and then about a month of waiting for the government and various third parties (SV Bank, Amazon) to get their pieces together.
soneca 1 ago 0 replies      
A brazilian startup of some friends got accepted (with no warm intros or fancier credentials, just "cold" application). They applied as soon it came, got an invitation in July i think. Now, as far as i know, the process is on hold as the startup is still figuring out some bureaucracy on their side.
pentesterlab 2 ago 1 reply      
Got in during the beta. Incorporated in less than 2 weeks. The process was quick and straightforward. I started the paperwork to get a debit card from SVB 3 weeks ago and I should receive it in few days.
CCing 2 ago 1 reply      
Can someone explain how the double-taxation works ? I mean, if you have your business in america, but then you work from your home country, how you manage it ? It's really hard found some informations about it...
kl_r 2 ago 0 replies      
Got in at the initial beta. Super smooth, took us about a month from getting approved to having everything sorted out (bank account, AWS credits etc).
MOARDONGZPLZ 2 ago 1 reply      
US based looking for incorporation, rejected after a couple weeks.
Ask HN: Tell me about modern databases
21 points by thom  2 ago   15 comments top 5
BrentOzar 2 ago 2 replies      
Dell Software's Toad Query Optimizer (for Oracle and SQL Server) has an engine that does exactly that. It takes your SQL, tries rewriting it a bunch of different ways, throws in different compiler hints, and measures the response time/reads/CPU/etc for each execution, then gives you a set of graphs and recommendations.

I wanna say it was around $1500/seat last time I looked at it. It's worth every penny if you have to write a lot of complex queries. I've bought it for just one senior member of a dev team, and everybody brings their worst queries to that person for tuning.

Here's the trick, though: after it optimizes a query for you, keep your original query around. You're not going to want to try to edit the query that Toad produces - it can be horrifically complex. Instead, edit your original query, then run it through Toad again.

brudgers 1 ago 0 replies      
I'd suggest the little red book (Stonebraker's not Mao's):


eschutte2 2 ago 1 reply      
It seems like the first question to ask is, where is the query planner falling down? What are you finding in those EXPLAIN ANALYZEs that is wrong? When you say "that isn't the way it seems to want to allocate resources," what does that mean - do you mean you want it to auto-create indexes? SQL Server used to have a tool to suggest indexes based on a query workload, is that what you mean? Have you used https://explain.depesz.com/ ?
rer 2 ago 1 reply      
You're missing something like this: https://www.monetdb.org/
bachback 1 ago 1 reply      
SQL is horrible for many use-cases. have a look at http://datomic.com
How to sell complex product?
8 points by nidhi40  1 ago   10 comments top 6
endswapper 1 ago 1 reply      
My response assumes that there is a need for a complex product. In general, unless there is a specific need for complexity, complexity is incompleteness, lack of polish, or a failure to target needs properly. Customers don't want complex products they want simple products. However, showing a simple "slice" of a complex product that addresses a larger problem or need makes sense, and is a case for the complexity.

Understand your customers needs and how you provide value.

The existing comments provide a good jumping off point, but with few specifics we can only speak in general. If you add more details I will follow-up.

The bottom-line is that your customers don't care about your product. They care about how your product helps them.

You want to understand the processes and problems that each individual customer is dealing with. If you don't have intimate knowledge of these already you have to ask strategic questions that reveal these.

Once you understand this, and demonstrate it in relevant terms to the customer, ask for the business. This not meant to be sarcastic or condescending at all. I have been in numerous meetings with smart people, executives, sales people. So often, they understand the need and demonstrate it, and then never ask, and they wonder what happened. Typically, it helps if you are confident when you ask.

ruler88 10 ago 0 replies      
I'd echo a lot of the other things people said here: simplify your product.

Even if you are selling a complex product. There are probably certain components/services that are simple. Try to isolate those simple components and just sell those. Talk to your customers, they are probably buying for just 1 reason not all the features that you offer. Make all the other parts add-on features.

I recently read about the XYZ statement that I think would be helpful in your case. https://medium.com/pitch-like-a-pro/creating-a-pitch-deck-si...

lisefromcaptiz 1 ago 1 reply      
Will assume you refer to pitching / sales conversation.

The worst you can do in sales is talk a lot (a good rule is talking 20% of the time, maximum).

I'd recommend:- writing down the types of customers you might have (user personae)- capturing the value you offer to each segment in 1 sentence.

Let's take Facebook example:For users: Connect 24/7 with your friendsFor businesses: Sell products to your target in a clic!For game developers: Push your apps to the biggest pool of players.For media: Your content introduced to up to 1.7 billion people worldwide...For investors: Get great ROI on a growing product the whole world is using.

A first conversation should spark interest.Then, you can ask questions and go on to features / details.

It's very hard to be concise, you might fear leaving some advantages of your product out, and it takes a lot of work and market feedback to make a short pitch right ...

I hope this helps :)

gesman 1 ago 0 replies      
Simplify it.
behnamoh 1 ago 1 reply      
What do you mean by "complex" and compared to what?

"Complex" is different from "complicated". Just as "easy" is different from "simple".

Enterprise solutions seem pretty complex, but if you're focusing on small businesses, then even a mobile app could be considered complex.

Completely depends on the situation.

CarolineW 1 ago 0 replies      
tl;dr I don't know what you're asking.

I've gone to look at your other comments and submissions, and I'd guess that English is not your native language. As a result you might (probably will) find it hard to write a short paragraph expanding on your question.

But with a simple, bare question like this you are unlikely to get any kind of response. You really need to explain more. Why is your product complex? Who is it for? Have you tested your market to make sure that what you have made is relevant to someone? How many have you sold so far? If only one or two, can you get your customers to talk to other possible customers? Do you know who your potential customers are?

If you haven't sold any at all, why did you develop it? Who did you have in mind?

Given my assumption that English is not your first language, here's a thought. Write a more complete description about your product, question, problem, etc, in your own language. Then at the top explain that English is not your first language, include your original, and then include a Google translate of it. If you use short, very simple sentences, then Google Translate can usually carry the meaning, but not the subtle nuances.

I hope that helps.

Ask HN: Is anyone running Kubernetes with Persistent Volumes in production?
18 points by nickjackson  2 ago   3 comments top 3
smarterclayton 2 ago 0 replies      
I can speak from the OpenShift perspective (which is just Kube as far as storage is concerned):

OpenShift Online and Dedicated (both hosted Kube/OpenShift) use AWS and EBS persistent volumes for elasticsearch and Cassandra storage, which is moderately high IOPs although not "all things tuned for performance". Most small non-cloud OpenShift deployments I know of are using NFS for medium / large shared storage - file or data sharing workloads. There are several medium sized deployments on OpenStack using Ceph under Cinder, and their experience is roughly comparable with AWS EBS and GCE disks.

Basically, if you need to fine tune many details of the storage medium, are carefully planning for IOPs and latency, Kube makes it slightly harder to plan that because it's abstracting the mounting / placement decisions. It's definitely possible, but if you're not dealing with tens of apps or more it might be overkill.

OpenShift Online Dev Preview (the free 30-day trial env) is Kube 1.2+ and uses the upcoming dynamic provisioning feature (which creates PV on demand) and is used for many thousands of small ~1GB volumes. Remember though the more volumes you mount to any node the less network bandwidth you have available to the EBS backplane, so Kube doesn't prevent you from having to understand your storage infra in detail.

Also, be very careful using NFS with replication controllers - the guarantee on RCs is there is at least N replicas, not at most N replicas, so you can and will have two+ pods running talking to NFS if you have an RC of scale 1.

Edit: typos

lobster_johnson 2 ago 0 replies      
It's worth warning that volumes are buggy, particularly on AWS. This one in particular is worth keeping in mind: https://github.com/kubernetes/kubernetes/issues/29324.
hijinks 2 ago 0 replies      
I used it with EBS volumes - mongodb datadir and also for rabbitmq datadir - works wonderful. If a pod fails it detaches then comes right back up within a few minutes.

We only have a single mongodb and rabbitmq pod since they aren't mission critical if they go down. We had the mongodb host fail and by the time I got paged and woke up the OK page came since kubernetes did its job and brought it back online

Ask HN: System76 Ubuntu laptops?
17 points by brightball  2 ago   18 comments top 13
ergo14 2 ago 0 replies      
I got a 14 inch Dell e6470 with 4 physical cpu cores - its stellar machine, everything is working using OS drivers from kernel - I love it - you might consider that - I like this machine way better than the late 2014 macbook pro (13 inch) my company issued to me.
brianwawok 2 ago 1 reply      
76 generally fine. I think the entire company is like 3 Russian guys who live in Flordia or something.

Biggest downside I saw was you are paying a 50% markup in Dell or Lenovo... But I guess no more pricey than Apple. (But no apple retina screens)

nataraj1l 2 ago 0 replies      
Thinkpads really are great machines for linux. Ubuntu 16 and immediately install cinnamon or Xmonad (per your taste)
samsnelling 2 ago 0 replies      
No experience with their laptops. I can speak to their customer service, and it is absolutely fantastic. If you find a machine that works for you, I could not recommend them as a company more.
hans0l074 1 ago 0 replies      
I have 2 System76 Ubuntu laptops and I love them both. One is a 14" Galaga UltraPro from 2014 (they don't have this model anymore) and more recently their new 15" Oryx Pro. Nice solid builds, good keyboards (apparently there has been a vast improvement with the kbds) no hardware issues etc. I use both for work. My Oryx Pro has 64GB RAM, 2 512GB SSD's (I put Win 10 on the second disk) and an NVidia GTX980 (I game on it as well, e.g Dragon Age Inquisition etc). The only issue is battery life - I ordered two power bricks for each (for work/home), but then I was not expecting a lot there. I highly recommend them (I'm a bit annoyed I missed the 10 series GTX cards which were just announced)Edit : I live in Finland, and ordered them from the U.S.A
brudgers 1 ago 0 replies      
[in the US]

Dell Precision 17 7000's can be ordered with Ubuntu 12.04 LTS. They come standard with three year next business day onsite warranties.


codegeek 1 ago 0 replies      
I wouldn't bother. I bought one in late 2013 and regretted it. I was so pissed that I even wrote a blog post on it. They keyboard sucked so bad that they literally sent a new keyboard to install along with a cute email from their CEO. I wanted a refund but they would not issue. I should have done a chargeback but I decided not to at the time.
dudul 2 ago 0 replies      
I have an old Lemur bought 5 years ago I think. I still use it occasionally (my main machine is a MBP now).

Never had any problem running Linux on it (I use Linux Mint). The quality is OK. The keyboard wasn't great, and the battery deteriorate really quickly. To elaborate, at the beginning I could get 5 hours, but after 2 or 3 years I had to replace it (Customer service was great btw).

I can assume that the newest generation fixed a lot of issue (based on photos the keyboard now looks much better). I would definitely buy a new one the day they decide to finally offer a 13''.

greydius 2 ago 1 reply      
I have a 2-3 year old Gazelle and a 2015 mbp. Here's my opinion: the Apple has beautiful hardware, retina screen, and an nvidia gpu. I hate everything else about it (e.g. mac os). The Gazelle shell is just a System76 branded generic laptop, but it has an i7 and ssd. The thing is a powerhouse, and I use it for almost everything.

My advice: if you want a solid development platform, System76 is the way to go (and will cost half as much). If you care more about a nice retina screen and dont mind mac os, stick with a mbp.

muggabugga 1 ago 0 replies      
This is all my research group uses for development, reverse engineering, and personal use. They really make some great machines, but I haven't tried the newest, super expensive models.

I imagine it is even better than the ones that we currently use, which are over four years old and still do everything we need them to do in stride.

Caveat: Almost none of us run these machines with Ubuntu. Debian or Mint are common, but so is Arch.

daxorid 2 ago 1 reply      
Microsoft Surface Book will boot most distros just fine, especially with the tigerite kernel. Prettier and faster than Thinkpads and thankfully devoid of the TrackPoint abomination.
sunstone 1 ago 0 replies      
I've got a 3 year old(?) Lenovo Y500 15" 1080p running the latest Ubuntu and it's fine with everything working.
imsofuture 2 ago 0 replies      
Thinkpads are the Linux analogue of MacBooks.
Ask HN: Remote-only job boards
80 points by pilom  5 ago   14 comments top 12
pilom 5 ago 1 reply      
awareBrah 5 ago 0 replies      
https://remoteok.ioBy Pieter levels is also worth looking at
gravyboat 4 ago 1 reply      
https://remote-first.com/, full disclosure I built and run this site. You can read more about the process here: https://hungryadmin.com/starting-and-finishing-a-project.htm...
orangewin 4 ago 0 replies      
http://nodesk.co/remote-work/ has a collection of remote job boards
kdamken 4 ago 0 replies      
Thanks for asking this, I was looking for resources for this myself.
Ask HN: What are your favorite articles/blog posts of all time?
122 points by tomdell  6 ago   33 comments top 27
e19293001 5 ago 1 reply      
When I'm feeling down or burned out I used to read "Good and Bad Procrastination"[0].

When I need inspiration I go read "How to Make Wealth"[1].

During my day job where I'm required to study specifications, I found "The Feynman Technique"[2] to be useful in understanding the subject quickly.

From time to time I also read "The Best of edw519: A Hacker News Top Contributor"[3].

I just repeatedly read articles and posts that I like:

[0] - http://paulgraham.com/procrastination.html

[1] - http://paulgraham.com/wealth.html

[2] - http://calnewport.com/blog/2012/10/26/mastering-linear-algeb...

[3] - https://web.archive.org/web/20160304034949/http://v25media.s...

p333347 5 ago 2 replies      
There is a well known open ended interview question - "what happens when you type a url in a browser and hit enter?". I have many a times imagined (I have never been asked this exact question) overwhelming the interviewer with details, that comes in waves, by going deeper and deeper, by asking rhetorical questions like "but what happens there" loudly and not caring what he answers, almost channeling Sheldon Cooper. In this fun scenario , I restricted myself to network stack of the OS and routing mechanism. However, I recently found this article http://danluu.com/navigate-url/ that is much more hardcore. It is now one of my favorite, if not all time.
AndrewOMartin 5 ago 0 replies      
A Brief, Incomplete, and Mostly Wrong History of Programming Languages

1964 - John Kemeny and Thomas Kurtz create BASIC, an unstructured programming language for non-computer scientists.

1965 - Kemeny and Kurtz go to 1964.


coldshower 6 ago 0 replies      
"How to Write Articles and Essays Quickly and Expertly" by Stephen Downes: http://www.downes.ca/post/38526
kayamon 6 ago 0 replies      
Steve Yegge's "Execution in the Kingdom of Nouns".


marmot777 1 ago 0 replies      
csallen 5 ago 0 replies      
57 startup lessons from Slava Akhmechet:


I don't think I've ever seen such an accurate, shrewd, and insightful collection of startup wisdom in one place before. Every bullet point in this list could be a book.

TheAlchemist 5 ago 0 replies      
I'm reading this one from time to time. Easier said than done, but so true !

"If You Dont Design Your Career, Someone Else Will"


glial 5 ago 1 reply      
The problem is "Write a C program of 512 characters or less that returns as large a number as possible." This fantastic reddit comment[0] led me down a rabbit hole that I still haven't dug my way out of.

[0] - https://www.reddit.com/r/programming/comments/csuey/write_a_...

mod 5 ago 0 replies      
Eight Years Today: http://paulbuchheit.blogspot.com/2012/03/eight-years-today.h...

I don't want to do it the injustice of trying to summarize it. I've been reading this blog post for years, here and there.

corecoder 5 ago 1 reply      
Two great articles from TDWTF:

* Programming Sucks! Or at least, it ought to! [0]

* The Oracle Effect [1]

EDIT - formatting again

[0] http://thedailywtf.com/articles/Programming-Sucks!-Or-At-Lea...

[1] http://thedailywtf.com/articles/the-oracle-effect

marmot777 1 ago 0 replies      
Here's one I read recently that I thought was very good in it's simple wisdom. http://sethgodin.typepad.com/seths_blog/2016/09/make-somethi...
dmfdmf 6 ago 0 replies      
Clay Shirky "Newspapers and Thinking the Unthinkable"

William Deresiewicz "Solitude and Leadership"

The Last Psychiatrist: "How to Create: Motivation for 2010"


Alex Smith Gives Commencement Speech at Utah

perfectfire 6 ago 0 replies      
It was just reposted a few weeks ago, but I really like Andrej Karpathy's "The Unreasonable Effectiveness of Recurrent Neural Networks": http://karpathy.github.io/2015/05/21/rnn-effectiveness/
IndianAstronaut 6 ago 0 replies      

This article describes how variations in intelligence has to do with parasite load and nutrition. May explain a lot of the lack of intellectuals and educated individuals in some countries.

pinouchon 5 ago 0 replies      
I think this one is very insightful and is one of my favorites: http://mindingourway.com/what-sort-of-thing-a-brain-is/
forgottenacc56 5 ago 0 replies      
The most insightful post on recruiting ever written:


baccredited 3 ago 0 replies      
Watch a VC use my name to sell a con.https://www.jwz.org/blog/2011/11/watch-a-vc-use-my-name-to-s...

Getting Rich: from Zero to Hero in One Blog Posthttp://www.mrmoneymustache.com/2013/02/22/getting-rich-from-...

HealthyTree 3 ago 0 replies      
Fred Brook's "No Silver Bullet". I've found it very useful to reason in terms of accidental vs essential complexity and constantly asking myself: is this truly hard or am I just making it hard by using the wrong tool/design/abstraction/architecture etc for the job.


afarrell 5 ago 0 replies      
"The Right to Privacy" by Warren and Brandeis.


unlearn_login 5 ago 0 replies      
This article made me carry a bottle of water with me: http://lifehacker.com/how-to-trick-yourself-into-drinking-mo...
davidy123 4 ago 0 replies      
Clay Shirkey's "Situated Software" http://shirky.com/writings/herecomeseverybody/situated_softw...

It goes on a bit too much so it's not always on point, but at the time I read it I really appreciated it bringing to focus that not every piece of software has to be about millions of users.

jotato 5 ago 0 replies      
"The Duct tape Programmer" By Joel Spolsky is a good one.

It always reminds me that we are here to build software, not design the perfect system. The quote from Zawinski is great

"It was decisions like not using C++ and not using threads that made us ship the product on time."


kqia040 6 ago 0 replies      
Awesome blog for people interested in data analytics.http://fivethirtyeight.com/
DrNuke 5 ago 0 replies      
The verses and the wit from the Irish-Princetonian poet Paul Muldoon on YouTube never fail to bring a broad smile to my face. https://m.youtube.com/results?q=paul%20muldoon
Ask HN: My game is growing fast. What should I do?
21 points by m0dE  2 ago   23 comments top 10
csallen 2 ago 1 reply      
Fun game! Where's your traffic coming from? Is it growing rapidly right this instant? If I were you I'd (a) double check the servers aren't going to crash, (b) start pitching as many bloggers and Twitter personalities about it as possible, (c) try to "capture" traffic with prominent links to a Twitter account, forum, mailing list, etc.

For a game like this, if you want it to stay popular for a while, you'll probably want to add more maps, mechanics, and/or rewards for players who keep playing and do well. Skins are a fun and simple idea, as is some sort of persistent score.

You might want to ask the founders at my site for advice, too: https://www.indiehackers.com/forum. I don't think any of them have made money off games specifically, but they might have good insights regardless.

dezb 1 ago 0 replies      
http://braains.io doesn't load, cloudfront keeps trying to redirect it somewhere.. blocked it..
lisefromcaptiz 1 ago 0 replies      
This is really cool!

A little story-telling + 'help' section would be great to onboard new players.

A share button, for twitter + facebook where with a description (where the cool story-telling could play a part).

kqia040 1 ago 0 replies      
Good job man, this is a really awesome game.
saluki 2 ago 1 reply      
It is fun . . . what's it built with.

More maps, leader board, start a signup system so users log in to keep points/score, username etc. Invite friends to play on a map together.

Add signups to an email list drip.co.

Good luck, it's fun to play so I'll keep checking it out.

HiroshiSan 2 ago 1 reply      
Well...just tried this game for a few seconds and already a user has identified something for you to work on: http://imgur.com/a/aFEN4
guessmyname 2 ago 1 reply      
There is an XSS in the chat: https://i.imgur.com/Eo7dwSY.png \_()_/
wwalser 2 ago 0 replies      
Add email capture and use that to communicate with users about new features and ask what they'd like to see added to the game.
sfx77 1 ago 0 replies      
cool game
jblow 2 ago 2 replies      
Is this post just an ad?
Ask HN: Where do you go for learning about health and well-being?
174 points by stevofolife  7 ago   85 comments top 47
eyan 7 ago 2 replies      
I've been focusing, and doing, this wellness and exercise thing lately. Just reading for the last several years.

Best article, which led me to action, is this http://www.mensjournal.com/magazine/everything-you-know-abou... together with the book The Power of Full Engagement https://www.amazon.com/gp/product/0743226755/ref=as_li_tl?ie...

And here are the guys I read regularly (on and off, actually):

Scott Sonnon: http://www.rmaxinternational.com/flowcoach/

Pavel Tsatsouline: http://www.strongfirst.com

Phil Maffetone: https://philmaffetone.com

the guys at GMB: https://gmb.io

and Leo Babauta: http://zenhabits.net

chestnut-tree 7 ago 2 replies      
The UK's NHS website is an excellent, reputable source of health information. It may not be the most attractive looking site, but it has a goldmine of info. There's information on ailments and conditions, treatments and general health advice.

Importantly, the information is written and vetted by qualified medical professionals.


kyriakos 7 ago 3 replies      
Finding about nutrition and health online is worse than searching for PHP sample code that doesn't suck.

There's a lot of opinions, some based on facts and research, some based on empirical studies and some based on pure misinterpretation of actual science. You are better of paying a visit to a good nutritionist who can provide you with a tailored diet to suit your body and lifestyle.

sleazebreeze 7 ago 3 replies      
There are many things about health and well-being that are specific to the person. You can find all sorts of ideas (many based loosely on science, others anecdotal) from just about anywhere - books, blogs, youtube, etc.

Really though, you have to find what works for you personally. Take any idea - let's say you decide that you want to know if eating less red meat is good for you. You can read a hundred studies that have conflicting results. Or you can try eating less or none of it yourself and see how you feel. You feel great? Awesome. Now you know! You don't feel any different? Again, that's awesome. Now you know you need to eat a little more red meat.

One example for me was pull-ups (the exercise). I always assumed you had to do them overhand with a medium-wide grip. They never "clicked" with me and I could never feel good doing them. After 10+ years of doing them the same way, I finally saw a video where a guy explained how different people might need to use different grip styles to feel it best. I tried several of the different grips and found what works for me. No study or book would be able to tell me which grip style I should use. It was just something I had to learn for myself.

For something more science-based, check out examine.com[1]. Anytime I read about a supplement or chemical that's supposed to be amazing, I go read examine.com and find out what the studies say.

[1] http://examine.com/supplements/

snicky 7 ago 2 replies      
I am a big fan of the health & fitness guide that's in stickies on 4chan.org/fit and I'm serious :) Direct link:


Lots of good stuff on nutrition and training without BS.

eswat 7 ago 1 reply      
Using the paleo diet/lifestyle as my true north has led to the nitty-gritty knowledge and resources I need to learn about being healthy, mainly: cooking ability, mindfulness/meditation, doing more with less (more whole foods, less ingredients), using exercise to accomplish goals other than look good naked. I get this info mostly from books, podcasts and pubmed, very rarely from blogs since the truths you find in these sources tend to have a half-life of a few months
lake99 7 ago 1 reply      
For general info, I go to https://nutritionfacts.org and http://www.youtube.com/user/thehealthcaretriage. I have a couple of medical textbooks at home to get a deeper understanding of some issues. Beyond these, when I have specific problems, my methods vary.
weavie 7 ago 0 replies      
I really like Marks Daily Apple [1]. He is big on Paleo and some may find him controversial/extreme. But he does back what he says up with a lot of science (maybe pseudo-science, I'm not sure).

Anyway following his advice has really helped me.


Thriptic 7 ago 3 replies      
- If it fits your macros / basic calorie consciousness that let's you hold a healthy weight.

- Some form of exercise that you do regularly

- Don't drink much

- Don't smoke

- sleep

- Have meaningful relationships

This will get you most of the way towards good health.

dandelion_lover 7 ago 0 replies      
I personally prefer Harvard T.H. Chan School of Public Health


They base their recommendations on real scientific articles.

Upd: https://www.hsph.harvard.edu/nutritionsource/what-should-you...

withdavidli 7 ago 0 replies      
4hourworkweek podcast, he has some interesting guests. former us national gymnastics coach, people that competed in ultramarathons, scientist who created drugs similar to steroids.

youtube for workout: athlean-x

joe rogan youtube channel <powerfuljre>, had on Rhonda Patrick (phd in biomedical science) for a few eps (3-4 hr each) talking about vitamins

if you buy vitamins you have to research the specific ingredient (cheap forms of magnesium, calcium, etc that don't get absorbed).

tsaprailis 7 ago 0 replies      
This is a very open-ended question. I think you need to let us know you current state.

If you're just starting out, getting a book on working out and eating healthy will get you 80% of the result for 20% the effort.

If you're already experienced, again it depends. Some people have already been mentioned like Tim Ferriss, Dr. Rhonda Patrick, Peter Attia, Dom D'Angostino and many more.

However you need to have the critical thinking to weed out what and how you could safely try some new theory. (say Intermittent Fasting or whatever new theory)

And I think after some time/experience you can go and pick up papers and judge them for yourself.

collyw 7 ago 1 reply      
Pubmed to see if there are any scientific studies done. There is a lot of crap information on health and well-being on the internet, I prefer to have the information backed up by science.
dhawalhs 7 ago 0 replies      
If you like the MOOC format, then there are a bunch of free online courses around health/nutrition [1] and mindfulness [2].

[1] https://www.class-central.com/subject/nutrition-and-wellness

[2] https://www.class-central.com/search?q=mindfulness

p333347 7 ago 1 reply      
Somehow, it seems to me that these topics are in constant flux, and something 'radical and latest' is discovered quite often which makes you scamper to upgrade. (I guess if one is a web front end developer, this feels like home.) I also dislike reading pop-health and taking life advice from so called experts in general, so I stopped reading these topics many years back. I follow a simple healthy balanced diet, which is more common sense than carefully scientifically crafted, remain stress free as much as possible, do moderate exercise regularly (not bodybuilding etc) and get enough sleep. Every now and then I look up some nutritional information but that's it. As they say, don't fix it if it ain't broke.

As for learning about health issues like diseases etc, I usually read reputable sources like mayo clinic or www.ncbi.nlm.nih.gov or www.nhs.uk. One of these is bound to answer my queries.

sn9 7 ago 0 replies      
Wikipedia and the fitness subreddits' sidebars.

Diet is all about focusing on nutrient density and hitting all your micronutrient targets (tracked with sites like Cronometer.com). (Rhonda Patrick is a useful resource in this realm, as is Examine.com)

crikli 7 ago 0 replies      
The Science of Ultra podcast. Run by Shawn Bearden, a runner and professor of physiology, he has scientists on to talk about high altitude physiology, hydration, effective calorie absorption, and a host of other fascinating subjects.

I am not an ultra runner or even a marathoner, I'm a wannabe alpinist. But the podcast is incredibly informative for anyone who is going to be under movement for more than 4 hours. I have learned more that has helped me in training and on hikes and climbs from this podcast than any other single resource.


kzisme 7 ago 1 reply      
Many of the "Ask HN" threads usually hint at work/life balance as well as ways to stay physically fit. Aside from that I've tried to find hobbies to stay active and become interested in. I suppose it can be broken down into fitness and diet (for my purposes) and it can be broken down much further from there.

Care to be a little more specific? I enjoy frequenting /r/fitness and /r/running for their FAQ information which is helpful as well.

Getting into a routine is a big thing (and a thing I struggle with sometimes) with improving health and well-being (imo).

sakopov 7 ago 0 replies      
Get a personal trainer to learn how to keep proper form while exercising and eat right to boost your metabolism. That's how I started 3 years ago now and the trainer was worth every penny.
johnnyfaehell 7 ago 0 replies      
I've found http://www.precisionnutrition.com/ to be one of the better resources online. I signed up for the certification and it's way more advance than what you see everyone else talking about. It explains the basics of how the body actually digests foods then goes into the day to day stuff.
return0 7 ago 0 replies      
Diet: I find forums at bodybuilding.com have a lot of info some times. If you are a guy, anabolicmen.com .

Well being is the job moral philosophy: https://www.amazon.com/Fundamentals-Ethics-Russ-Shafer-Landa...

kevindeasis 7 ago 0 replies      
One of the most important things ive leatned is do one thing one small step at a time.

You want all of these to be a habit. It's a journey.

atmosx 7 ago 0 replies      
Just subscribe to some health related magazine. You'll learn a lot regarding generic well being, pretty standard things. Then you can choose were and when to dig for more (nutrition, exercise, relaxing, etc.)
napperjabber 7 ago 0 replies      
Unfortunately, between today and 3 years ago, Google search is returning the assuming of a meat based diet. I could easily find correlations between food and nutrients evaluating how my body would function. Today, it's harder to find good information on the topic. Now it's just noise or my googling ability has failed me.

Grains and fermented food for breakfast. Snack throughout the day on high fat veggies/lean meats/nuts. Dark leafy greens and protein for dinner. Eat at least two servings of fruit a day. Above all, if you have a craving, eat it, but reduce the quantity.


yodsanklai 7 ago 0 replies      
You can find tons of blogs and articles in health magazine, but I think they are mostly a loss of time. I'd rather try to find information provided by health professionals. You can even ask your MD.
gabosarmiento 7 ago 0 replies      
Reddit. These subreddits are my primary source of guidance: /r/science - /r/Paleo - /r/Fitness - /r/GetMotivated - /r/Running
adamzerner 7 ago 0 replies      

Well written, thorough, and most of all... actually evidence based!

sridca 7 ago 0 replies      
A lot of health related problems come down to dysbiosis (imbalance of gut flora). It helps to read up on those. Also look up FMTs and raw milk diet.
id_ris 7 ago 0 replies      
Dr. Rhonda Patrick. she has a website and podcast
Zelmor 7 ago 0 replies      
https://chriskresser.com/ and Mark's Daily Apple
aantix 7 ago 0 replies      
How has no one mentioned https://www.examine.com ?
cpach 7 ago 0 replies      
Nano2rad 7 ago 0 replies      
Question is too broad. Health can be exercise, diet, meditation, etc.
hfhrurnfhf 7 ago 0 replies      
The same place I go for learning about anything: Wikipedia
Nano2rad 7 ago 0 replies      
Follow Marion Nestle @marionnestle on Twitter.
JesseAldridge 7 ago 0 replies      
Amazon.com, kindle books.

For fields outside of computing, the best knowledge is still mostly stuck in book form.

dschiptsov 7 ago 0 replies      
Remote rural areas.
dominotw 7 ago 0 replies      
stay active and don't eat bad food.

Is there more to it?

qaq 7 ago 0 replies      
HN :)
slifin 7 ago 0 replies      

Power of Now - Eckhart Tolle

7 Habits of Highly Effective People - Stephen R. Covey

saintzozo 7 ago 0 replies      
I am in the gym two days a week running a push/pull split. The two days are picked uniformly at random each week to 'confuse' the muscles and stimulate continued growth.

More importantly, every Sunday morning I attend Mass at my local Roman Catholic church. The body and spirit both require regular attention.

Mz 7 ago 0 replies      
I bitch to my son that I need specific info for a specific issue, an hour later I have an email. Then I often blog about it to collate the info.

(If you were hoping for links to sites so you can see it yourself, perhaps you should say that.)

Ask HN: What will be the effects of the upcoming rise of AI and Automation?
12 points by maitrik  2 ago   6 comments top 5
p333347 13 ago 0 replies      
I can't speculate on the economics part of it all, but I have a different take. I think it will lead to another renaissance of sorts. Assuming that AI and automation are well done, it will give people a lot of free time to indulge in activities like art and philosophy more than what is possible currently (if one doesn't do it, then at least appreciate others' efforts). Liberal arts will come to fore again. There will be more intellectual activity that isn't tied to technology. Wars will become rare (after the last war to end all wars, of course). Fewer people will die (at least in non poor countries) due to advanced medicine. I am not sure what all this critical thinking etc and over population will bring about though. Probably a combination of natural phenomenon like super bugs and massive solar flare will take us back to early 1900s.
generic_user 2 ago 0 replies      
I'm not going to claim to be smarter then anyone or have any answers to your questions. I will point out that artificial intelligence is something entirely different from automation.

You can make the case that Humans have been coping with automation from the rise of agrarian civilisation. Suddenly hunter gatherer tribes had to adapt to an entirely new social order and way of life. The industrial revolution radically transformed the world and we have muddled through and adapted. I think automation will always create winners and losers, wars, upheaval etc but civilization will adapt and continue on in some form.

Artificial intelligence that has a true self awareness and agency would be a genuinely new, never before seen phenomenon. What the consequences would be are totally unknown. There is no previous data or experience to measure.

biren34 2 ago 1 reply      
I've been thinking about this, and for me, the driving force is status. As far as I can tell, status drug s human behavior more than anything.

So, when it comes to automation, etc. the thing that really strikes me is that some people get their status from work. Others feel that you should get your status from work. But the truth seems to be that one work is just one of way to get status.

Why does this matter? Because if we provide a basic income, only a small minority of people will continue to get their status from work. The rest will do it in some other way, like collecting YouTube subs or whatever.

This will represent a seA change in society, with a massive extension in adolescence. We'll all be in high school forever.

samblr 1 ago 0 replies      
Superintelligence and Singularity is Near are good books to read o this.
baccheion 2 ago 0 replies      
Something is up. First, the educational system (High School, and especially College) was about beating in (ie, indoctrinating) conformance, compliance, "teamwork" (leaving yourself a slave to the shht of others, in place of getting on with what needs to be done), focus (rather than branching out, hedging your bets, diversifying, etc), and other things that seemed irrelevant when it came to setting one up to be competitive and prosperous in the world at large.

I graduated at the end 2007, but it's likely things haven't changed much now. Everything was watered down, even though I was a Computer Engineering major, and there wasn't much to be gained from all that was being pumped in. In fact, it's as though they were trying to beat out of me whatever good was left, to then have there be nothing but an empty, uncompetitive, cookie-cutter shell of a person.

This approach does not line up with how the world seems to be trending, and with the "rise" of these AIs and advanced automation strategies. I'm not sure what's going to happen, but it's either going to be really bad in general, or everything will collapse forcing the need to reinforce, strengthen, or otherwise make better the BS that is the educational system and introduction to the working world.

Other things will need to change. Performance enhancers (safe, side-effect free smart drugs) may be one way to help things along (not current ones, but new and more advanced developments to meet future needs), but that could easily descend into "drugged up" culture, which is pointless.

Many things can easily be automated away to leave room to work on more interesting things and to not be as tied down as in times past; however, in looking at the groups and people behind most potential advances, I'm more scared that optimistic. I'd generally be optimistic, but these people seem either clueless, or not well intentioned. That seems like a recipe for a bad outcome.

Either way, it's about time things started getting good. Factoring endless amounts of things into an online dating match percentage calculating algorithm? Yes! It would be great to have the online dating system take into consideration many things that it would take a normal person years to evaluate on their own. And with the increased popularity/availability of smartphones, it should be fairly trivial to verify profiles, and collect information privately (and securely-- to avoid it being resold/misused by dating sites) that will further enhance the matching algorithms/strategies.

It would be nice to approach a period in time where an online dating app helps you discover who you are, what you want, what you value, and other things in the direction of better understanding yourself and what you want/need in a relationship (versus being indoctrinated with some arbitrary irrelevant garbage).

The same idea can be applied to job searching, roommate finding, business partner seeking, college selection, and many other things. I think it's been established (maybe just in my mind) that they are at least in the realm of "solvable," so now it's about doing so properly, to not end up spinning on another iteration of the same garbage.

Ask HN: What's your backup plan for 2Factor authentication if you lose your phone
20 points by dsinecos  3 ago   15 comments top 11
kohanz 3 ago 0 replies      
My wife's phone is my "backup phone", so both of us would have to lose our phones at the same time for there to be a problem.
senjindarashiva 23 ago 0 replies      
After loosing the key's once... I got a bit paranoid and set up a backup phone that stays at home. However lately i've started using enpass which allows me to sync the 2fa key's as well as the passwords.
vangale 3 ago 1 reply      
I keep paper keys for google and use authy.

I also use pass (https://www.passwordstore.org) and so I might start using this very new app https://github.com/felipelerena/passotp/

stevekemp 3 ago 0 replies      
Every time I add a 2FA to my phone I also add it to an encrypted password store on my SSH-server.

That way I can run `oathtool --totp -b $token` via SSH if I need to use it.

atmosx 3 ago 0 replies      
Backup keys in 1Passwd for all 2FA enabled accounts except Amazon. However, I will disable 2FA from AMZ's main user and use an extremely long password instead to avoid having to deal with Amazon support, since they don't give backup codes...
ianleeclark 3 ago 0 replies      
I've noticed a lot of paper keys being used for backup keys. The three, off the top of my head, are github, keybase, and google, which offer paper keys which can be used to retrieve your password--even if your phone is lost.
dsinecos 3 ago 1 reply      
Edit - What do you do for services (For instance Namecheap) that do not provide backup codes or where Google Authenticator is not applicable?
iyn 3 ago 1 reply      
I use Google Authenticator as my 2FA solution. I manually downloaded Authenticator database from the phone and backed up on my external disk.
AznHisoka 3 ago 0 replies      
I store backup keys in my wallet and my safe.
SkyRocknRoll 3 ago 0 replies      
kennell 3 ago 0 replies      
Authy, painless 2FA.
Ask HN: Working in Sweden?
55 points by throwy667  7 ago   39 comments top 10
jseban 7 ago 2 replies      
Also a native swede, worked as a software developer in Stockholm for 6 years.

Outdoors, yes, and especially the closeness to the sea and ocean. If you like boating or kayaking this is a huge plus, and you can also rent boats if you don't want to own one.

Housing market is crazy, you definitely have to buy an apartment and be willing to make a big investment in this, renting is basically not an option. The city also gets suburban and quiet very quickly as you move away from the inner parts, so if you want to live in a lively neighbourhood it's going to cost a lot.

Lifestyle is quite wholesome, punctuated and routine, and suits sporty people very well. On the social side swedes are reserved and private and the financial and social pressure to start a family is quite high.

Nightlife is a bit on the snobby and expensive side, with fancy restaurants and champagne.

The winter is dreadfully long and dark, and the summer is gorgeous. Many people go to Thailand in the winter and enjoy the beautiful archipelago outside Stockholm in the summer.

If you are a sporty person who enjoys boating, and/or wants to start a family, go for it. If you are looking for a fun place to stay for a shorter time and want to have a spontaneous social life, I wouldn't recommend it.

drakonka 7 ago 0 replies      
You have gotten good feedback on what it's like to live in Stockholm here already.

I moved here four years ago from Australia. The worst part about relocating here is finding housing. We ended up just buying our own apartment and that ended up being much cheaper and less stressful than continuing to rent. Other than that for me personally there hasn't been much to complain about. People tend to regard Stockholm as an expensive city. Coming from Western Australia I didn't feel that much of a difference. My salary isn't huge, but make enough after the hefty taxes to have spending money left over. Public infrastructure seems great, it is safe, bike paths everywhere. People _are_ reserved yes, but there are many Meetup groups where you can socialize. The nature is beautiful, and how close it is to more urban areas is a big plus. Very pet-friendly - pets are allowed on subways, in many stores, etc (although the level of veterinary care and approach here varies, but I could write an entire separate novel on that).

I would ask your potential employer if they can help line up housing for you for some time after you move - larger companies often help with that and have their own contacts.

Also the games industry is booming here. I don't know what it's like compared to your current EU country, maybe quite similar. But after having lived in Ukraine, the U.S., and Australia Sweden is definitely my favorite.

hankmander 7 ago 3 replies      
Stockholm native working as a dev for 5+ years here. I'll just add the only two things I see missing from previous posts:

You won't make any friends among the natives. We'll have a beer with you after work but don't expect anything serious. None of my friends have foreign friends. Can't really say why this happens though. We are pretty reserved.

Nightlife is not snobbish as somebody else said. There is the whole range from dive bars to upscale to any kind of nightclub you can think of. It's similar to most bigger western cities. Also, I've noticed the variety and quality of restaurants are outstanding in Stockholm when comparing to most places I've been.

johapers 7 ago 3 replies      
Native Swede here.

Stockholm is quite dynamic in terms of its start up culture. There are a number of ways to network within the industry, most prevalent way to do so is Sthlm Tech Meetup.

Salaries are relatively low for engineering jobs (compared to ex Germany), but should be ok in the software space. Ok in this case would be ~4000-4500k/month for a relatively experienced software engineer. Do note that tax levels are rather high once you reach higher levels of income (50%-55% marginal tax rate). The tax is a pain until you have kids and you pay almost nothing for daycare and schools.

The main thing to be aware of is that the housing market in Stockholm is completely crazy. It is very difficult to find somewhere to live. If you manage to get relocation support this should not become an issue for a while. Be ready to pay ridiculous money for second hand rentals (compared to salary)

manarth 7 ago 1 reply      
I spent nearly a year as a contractor (for Ericsson) in Stockholm.

I found it difficult to rent a flat, and I got the impression that this was fairly common. Be prepared to hunt through adverts, and respond as soon as you can after its published. If you leave it much more than a day, you'll probably get ignored. My Swedish colleagues told me that even if there's a phone number on the advert, don't ring it, email instead. And reply in Swedish - have someone translate your reply for you. But be prepared for lots of frustration when house-hunting.

In general, language wasn't an issue - although I knew no Swedish, everyone spoke excellent English. Not just work colleagues, but coffee-shop waiters, supermarket clerks, bar staff, pretty much everyone I met.

Financially, there were few surprises. Housing was expensive, just like any other major city. Alcohol's a little pricier (taxes), and you can only buy it in a chain of government-run shops, which have limited opening hoursyou can't just pop to the supermarket for a bottle of wine. As for the rest: coffee, eating out, groceries, were all on a par with western Europe prices.

Speaking of coffee, the culture of Fika is a great Swedish institution, and should be spread worldwide :-)

I love extremes of weather, so a very snowy winter and a gloriously hot summer were great for me, YMMV.

I ended up coming back to the UK, but some of my contracting colleagues from other parts of Europe decided to stay. They've since settled down in Stockholm, and easily found another project at the end of the contract.

Ericsson's taken a fairly hefty hit this year, and are planning another round of significant layoffs, which may have a short-term impact on the tech market around Stockholm.

adamwi 7 ago 0 replies      
Also native Swede so might be a bit biased.

If you enjoy the outdoors Stockholm has a lot of accessible nature just around the corner with large parks in central city as well as accessible and clean water ways as large parts of the city is located on islands. Within weekend trip range you have alpine skiing and wilderness in the northern parts of the country.

When it comes to job hunting there are a number of larger incumbents such as Ericsson that currently is struggling a bit. But there is also a number of larger "start-ups" such as Spotify, Klarna, King, iZettle, etc. These companies are very used to relocate new employees and have a structured process for everything from housing, to tax admin, even initial social activities.

elias12 7 ago 0 replies      
Have you seen https://teleport.org/cities/stockholm ?

Pretty much gives you roughly the things you asked above.

You can also post a question on their "Ask A Local" board, if you are up for more specifics...https://teleport.org/community/c/ask-a-local/stockholm/

sheraz 5 ago 1 reply      
As a foreigner in Sweden you will face the following problems:

- most of your friends will be other expats. Swedes, at least in Stockholm, do not seem very keen to open their social circle to you. Language is certainly a part of it, but there is a darker cultural side to it that neither myself or others have been able to crack.

- As others have said housing is a shit-show. Fortunately public transit is quick and makes long commutes tolerable.

- If you have a foreign-sounding name, then you will want to change it. Swedes love to play the multicultural card all over the place and virtue signal at every level, but facts are facts. Your CV/resume is passed over by recruiters and HR people if it not Swedish enough. Indian, Muslim, and African names go to the bottom of the pile or are never called. Seriously, take a Swedish name when you get here.

- Working in the tech sector, there is little incentive to learn Swedish. The amount of time it takes you to become proficient is not worth it. Worse, if you are dark-skinned and speak broken Swedish it only hurts you more socially and professionally. Best to keep it in English. Save Swedish for social things.

- Quality of life by many measures is high, but there is a depressive darkness here. Strangers don't chit-chat. I've never seen a subway car so full of people be so quiet. Everyone is silent, and that makes it incredibly lonely.

- Customer service sucks. I mean it is pitifully bad in Sweden. From restaurants to banks it seems that there is no training or appreciation for customers. This is where Americans really kick ass, and I wish Swedes could take a couple of notes here.

- There is no 24-hour culture. Strange that a place claims to be the capital of Scandinavia, but literally everything shuts down before midnight save a a couple of bars.

- Gypsies everywhere panhandling, but you are from EU -- so nothing new there.

- Drinking culture here is strange. People are absolutely hammered by 10pm

- The tech scene here is nascent and lacks the pay-it-forward attitude that you might find in the US, Berlin, or London. There is an American guy here named Tyler (@steepdecline) who has worked his ass off for 3+ years to make something happen. However, I fear that if/when he leaves, this scene will die. He might be a good resource to ping.

All in all, quality of life in Sweden is high (clean, healthcare, etc). However, there is a cultural darkness/sadness/loneliness that touches everything -- and I think Swedes would agree with me here.

pzh 7 ago 0 replies      
I recommend watching "Welcome to Sweden" ;)
throwy667 6 ago 2 replies      
Also is the 6 month probation period everyone is offering me common? Looks a lot to me, I'm not a new grad without experience.
Ask HN: How to forward client port number used?
2 points by dedalus  1 ago   2 comments top 2
stevekemp 20 ago 0 replies      
The obvious question to ask is why do you care what the client port was?
jjoe 17 ago 0 replies      
That's remote_port
       cached 13 September 2016 04:05:01 GMT