HN user

gmarcus

16 karma
Posts1
Comments13
View on HN

Back in 1994, was interviewing with Some Big Finance (SBF) wall street firm in NYC. They wanted to pair me with one of their traders to write code in real-time for intraday trades. Interviewer asked me to whiteboard a String implementation in C++. Grabbed the marker and wrote on the whiteboard:

    typedef RWCString SBFString;
Would you have offered me the job?

How about a real world example.

tl;dr The Hybrid app took longer to ship (+ 20%), and was more expensive (+ 525%)

We were able to participate in a unique experiment: - Develop a native app for iOS and Android at the same time a separate team was developing the exact same app as Hybrid (Cordova/React).

The app had 20 screens and used modern UX (onboarding, profiles, hamburger menus, alerts, GPS, content rich screens (text/images/video) with lists/details talking to a backend REST API with local/offline/sync'd storage.

Native = 8 man/weeks

- 1 iOS dev for 4 weeks - 1 Android dev for 4 weeks

Hybrid = 50 man/weeks

- 5 Hybrid devs 10 weeks

You can argue that the 5 devs had overhead in communication and project management, but we observed that was not a major contributing factor.

The above was for app development (not the server). Hybrid app required the same amount of QA as the Native app.

Tech Entrepreneur (currently running an iOS/Android dev shop)

In 1981 when I was 12, my folks took me to my cousin Herb's house. He just bought a brand new BMW and took me for a drive. Coming from a middle income family, I never had been in a car like this. The handling on the road, the bucket seats, the dashboard were all amazing to me.

I asked cousin Herb, "What do you do to have a car like this?". Herb said "I'm a systems analyst". "What's that?" I asked. He replied "I work with computers".

Click...computers = BMW.

Next Monday, I stormed into my 7th grade math class and said "I want to learn about computers". Got started on TRS-80 and the rest is history.

I remember how amazed I was to press an "a" on a keyboard, and an "a" showed up on the screen. I wanted to know how that happened...and once I started coding, I realized that I could be in control of what happened. I went from an end-user to a maker and loved it. The possibilities were limitless.

Greed may have started me on my career path, but it turns out that computers and me were a match made in heaven. I loved the pace of innovation, and I was doing stuff of my own creation that amazed people. It felt good to be a geek.

Finally got my BMW while the VP Engineering at a SF startup in 2009, but that small accomplishment pales in comparison to the lifetime of creating and exploring that I have had....and still enjoy.

On a side note: I feel so fortunate that I found my career at the age of 12 (though I didn't know it at the time). That drive gave me a focus that helped shape many decisions that people struggle with. Summer jobs, hobbies, college major, first job, where to live. They all fell in place easily for me cause I knew what I wanted in life.

- TRS-80 in 7th grade JHS

- Winning JHS science fair with my personality prediction algorithm

- Atari Computer camp when I was 13

- Reading Byte magazine like it was Shakespeare

- Changing my home address so I would be zoned for my local HS a year earlier (they had actual programming classes)

- Placing out of BASIC, and going directly to PASCAL in 9th grade.

- AP Computers in 10th grade (and tutoring the 12th graders)

- Working summer jobs as data entry and tech support through HS

- Winning an award for my HS in a regional programming competition

- Summer Advanced Sciences and Technology program. Got to work on medical imaging software for a research hospital at 15.

- Convinced my HS principal to let me co-teach a course in Applied computers (DBase, Lotus 123, Wordstar) cause they no longer had any classes for me to take.

- Went to Stony Brook University (inexpensive, and great CS dept) and able to declare a double major in Computer Science and Applied Math

- Started the Stony Brook Computer Science Society and was president for the next 4 years

- Used my financial aide work/study grant to get a university job at the Micro-Computer Demonstration Lab selling Apple/IBM/Xerox computers to faculty, students and staff. $3.15 an hour.

- 2 years later, the guy that ran the lab retired and IBM offered me a part-time job to run the lab. Same job, but now making $10.50 an hour.

- Represented Stony Brook in regional collegiate programming competitions

- Got a research job at IBM TJ Watson Research my Junior summer. Met a brilliant researcher who was moving to the private sector to do a startup in NY. Gave me a job offer that would be waiting for me when I graduated in a year.

- 1991: Moved to NYC to work at the startup (Ovid Technologies) where we built Medline using OOP.

- Rode the OOP wave through 3 more jobs, and promotions from Developer -> Sr. Developer -> Project Leader -> Director at various startups in NY.

- 1996: Joined a NYC startup (InterWorld) where we built app servers for our e-commerce products.

- Rode the "internet" wave through 2 more jobs, and promotions from Director -> CTO -> VP Product

- 1998: Joined an SF startup (Topica) as CTO to build a free email groups product. Got a BMW.

- 2001: .bomb and moved back to NYC, doing tech consulting for a few years on scalable server infrastructure

- 2003: Joined a CT startup (Netkey) where we built systems management software for Retail. Moved to Boston to build up a dev team. Got acquired by NCR.

- 2008: Moved to Brazil to be with my partner. Thought I would pickup another CTO type job at a startup, but I was too ahead of the curve. Played a lot of Xbox trying to figure out what I was going to do with my life.

- 2009: Out of boredom, started to play with the iOS SDK. Last time I wrote code was in 1996, 13 year gap.

- 2010: Published my first app. Thought I was going to be rich...instead learned that it was tough to make money publishing apps. Just then, a friend said he needed an app for his startup in NY. I banged it out for him and realized I could make a living doing consulting as an app developer.

- 2010: Started my own company, Cliq Consulting. So far: 17 clients, 35 apps, 89 million installs.

- Currently riding the app wave...and having lots of fun doing it.

In my experience, NDA's are different than non-competes. As a development consultant, I am fine signing an NDA that protects the IP of one party, as long as it does not prevent me from providing my services to other parties. If 2 prospects have the same idea, it is my choice if I choose to work on either of them. Doing so does not break the NDA as long as I don't share IP between the clients. NDA's, worded properly are typically not a problem. If a client ask for a non-compete, I will politely decline.

I am of the opinion that semantic markup is not an indicator of a quality product. Tradeoffs need to be evaluated including maintainability, code sharing, knowledge transfer and rapid prototyping among other factors. Purists that say no markup in HTML are constrained to a religion, just as any other must do that drive decisions. I argue that you employ not just the tools, but the techniques and strategies that will allow you to advance. Every situation is unique.

Regarding this technique...

In some circumstances, it is more than justified. Adding another layer of encapsulation can allow for a separation of concerns that may accelerate some stages of development.

I ask myself, is this more of a tooling question? If, we had a view of our stack that a) allows for these encapsulations and b) surfaces the right information at the right time would we not make use of it?

For example, my personal frustration is that when building a new feature for Rails for example, I have to conceptually traverse the full stack (html/erb, css/sass, javascript/rjs, views, helpers, layouts, controllers, model, database) -- substitute your own versions these separations depending on your stack. That means that adding a new checkbox to a form could potentially touch 9 different layers! Do I really have to hunt and peck for 9 different files to add 1 checkbox? Oh yeah, don't forget your tests...10!

I think that organizing the layers allows different experts to optimize different layers...a good thing!, but at the cost of being able to see 1 slice of the 10 layer cake.

I often search (and have not yet found) a set of tools that will allow me to view my stack depending on my current task and goals. I am not talking about edit/debug/optimize type views that come with some IDEs. I mean the logical grouping of all concerns related to my current feature.

This is a tooling issue in my opinion. Why can't my editor give me the right view of my stack at the right time? At a minimum, let's have our editors filter project files (and database views) depth first, grouped to all files that are relevant to the feature I am currently implementing. Sure, I can quick open and type out some names, but I would rather have my editor show me the relevant files (and only the relevant files) that make up my current slice of my cake.

Is there an editor, or plugin out there that will do this today?

Or what about 1 step further... Instead of surfacing files, what about surfacing just the chunks of code that are relevant. What if my editor let me author bits of all parts of the stack for 1 feature in 1 logical file, and save it out to the traditional locations expected by my framework. I personally would be more efficient, and effective, if I could see my snippets of html/javascript/css/controller code/model code all in 1 tight view. No more would I have to keep all the connections in my head, they would be laid out right there in 1 file. Also required for this type of productivity would be simple ways to reuse and refactor.

Just looking for a tool that will let me have my cake and eat it too.