Hello. This article is part of a series where we speak with professional software developers, ask them what it’s like to write code for a living, and perhaps gain a few insights into the software development industry along the way.
Today we’re talking to Joe C. Hecht also very well known as “TJoe”. Joe is now tapping out code in the humid heights of Florida although during the course of the interview I found out he is a native Texan who was born and bred not more than five miles away from where I live now. The world of development is much more close-knit than you could ever imagine!
Hi Joe, it’s really great to talk to you, thanks for taking the time
It’s a great idea! As I said, I am very happy to participate.
You’re a very well known name in the Delphi community. For the few who don’t know you, what would be your brief summary of who you are and what you do?
Hired Gun Programmer – Have Delphi – Will Debug.
Which Embarcadero product(s) do you use a) the most b) regularly?
RAD Studio! I use Both Delphi and C++ Builder. I have every version ever released, installed and ready to go.
I get a fair number of clients considering an upgrade from legacy versions, wanting to modernize existing applications, and cross platforms to support macOS and Mobile platforms.
Hands down, I recommend RAD Studio as the best cross platform development tool on the planet to get the job done. Embarcadero has really gone “all in” for crossing platforms, for both the compilers and the visual controls. They have done an amazing job, in a market where there is no other comparative tool.
How and/or why did you become a developer?
I was originally in the commercial printing business. When the Apple Laserwriter first became available, we needed custom PC printing software. I started with BASIC, and quickly moved to C. I was already very impressed with Borland’s Sidekick and Superkey products, so when Borland mailed me about Turbo Pascal, I jumped right in and our productivity skyrocketed. The rest is history. Our desktop publishing utility TypeStudio won a PC Magazine award, and software development quickly became much more successful than our printing business.
What helped you the most at becoming a developer?
My development springboard came with my first modem. I found the Borland Compuserve forums staffed by the famous TeamB members. I quickly learned a lot by reading the posts, and then started helping others in the forums.
I firmly believe that investing bits of time going through the replies of forum posts (even the ones you are not interested in) often uncovers many hidden coding jewels along the way. Technical discussions forums are probably the best way to find great answers, since poor answers are usually followed by replies that point out any flaws.
Do you think you will ever stop being a developer? If so, what would be next?
If not for RAD Studio, I would consider a different profession. I use many different development tools and compilers, on several platforms. For long term development, your IDE becomes your home, and RAD Studio is the only tool I have found that actually makes the overall development experience extremely pleasurable. It has everything you need, it’s very responsive, well thought out, and highly customizable.
What made you start using Delphi/C++ Builder?
I was heavy into writing Windows programs from scratch using Borland Pascal for Windows. I received my first copy of Delphi when I worked at Borland. It was an amazing experience to witness the first serious point and shoot visual development environment. It was blazingly fast, and totally changed the Windows programming paradigm to RAD (rapid application development). Why use anything else?
I started using C++ Builder at Borland, as it was developed. It was decades ahead of its time (and still is). I also used Kylix (the Linux version C++ Builder), that Linux coders still talk about.
If you could give some advice to a student who is considering a career as a software developer, what would it be?
Try not to “over specialize” in a given area. These days, specialization is something for the heart, not a career. Software development has become a very fast moving industry that quickly branches off to using latest technology of the day. Job postings often list requirements demanding skill sets in the dozens.
Make yourself well known in on-line forums, and read the posts. You will learn a lot by reading over the exchanges posted in the development communities.
Tabs… or spaces?
Spaces! Is this a question about code formatting practices (made easy by RAD Studio’s excellent code completion module)?
A few key rules for success that I try to follow:
“Never a then without a begin”. Code blocking is critical to tracing during the debugging process, and provides a good layer for “late night code clarity”.
“Never a create without a free”. Go ahead and write your deallocation code whenever you allocate a resource. You can later block it, move it, comment it, (or whatever), just make sure you write it. If you move the deallocation code far, it’s not a bad idea to document in the allocation code where it was placed (and why).
Section off long winded code by each “thought” in the process. It can be as simple as adding an empty line, or preferably a comment.
What’s the best day you ever had as a developer?
I woke up with a very fever, having had a dream were I solved a complex problem that had been nagging us for years. I coded it up, and the solution in my dream was correct.
What’s the worst thing about being a developer?
Working in that “other” IDE (of course)!
Architecting a large solution, then coding it up, only to find that in the end, it does not work, and requires a totally different approach.
What’s the coolest development tip you know?
If you are really careful, you can write code that is almost exactly language portable between Pascal and other C based languages (minus some small rearrangements for syntax that can be automated). I port a lot of code, both directions, to and from C and Pascal. I find that Delphi’s “compile and run” is so fast, it is often faster to develop code in Delphi, then port the Pascal code to C for final delivery.
Work from home, work from an office, work in an open plan / shared space? What do you prefer and why? Do you get to choose?
I prefer coding on cruise ships!
With the exception of my most excellent time at Borland’s Scott’s Valley Campus, I have successfully worked remotely since 1985.
I use high end laptops with large screens and at least dual monitor capabilities. I have small briefcase containing two Mac Mini’s that I use for serving up VM’s with development environments, along with a small wired network, and various ARM boards, tablets, and phones for “mobile development” (no pun intended).
With a good power inverter, I have coded for entire summers while visiting the US National Park system, and have twice lived on my boat with family, coding remotely for over two years.
Tell us something interesting we don’t know.
The Borland campus was filled with spirited camaraderie and colorful characters.
I received the moniker “Tjoe”, as given to me by Bill “One Eye” Fisher.
Anders “If you follow what I’m saying” Hejlsberg
“Lloyd at Large”
“The cheap imported Anders” (to differentiate the two Anders)
Lino “Hey Boss” Tadros (who at last count, now owns the old Borland Campus).
If you could wave a “fix the tech industry” magic wand what would you change?
Put Delphi into the classrooms!
Do I get three wishes?
Computer privacy, security, and updates are the big issues. Opt-In should be a choice, not a rule. Requiring your mobile phone number to receive a bit of product information is pure evil, and the databases tracking our every breath should be permanently wiped.
Have you been to Silicon Valley? If so, how was it? If not, have you ever wanted to?
My time in Scott’s Valley at the Borland Campus provided some of our family’s fondest memories. The people at Borland were fantastic to all of us! The scenery was second to none. It was a truly treasured experience, and a highlight of our lives. Sadly, we had to leave due to extraordinary circumstances, but we have returned a few times to visit our friends, and would go back in a heartbeat.
Have you ever met any famous/well known tech figures? Who was it? How did it go?
I have had the great pleasure to meet, work with, and even become friends with some of the industry greats.
Steve Teixeira, Lino Tadros, Danny Thorpe, Allen Bauer, David Intersimone, and we can’t forget the entire membership of the “Borland TeamB”.
Anders Hejlsberg (the father of Delphi) certainly comes to mind. We had a very casual relationship (I did not work directly with him), but we would meet up on occasion. He was very nice, genuine, and very accommodating (even for my silly Delphi questions). Sadly, it was me that got open up the door when Bill Gates famously pulled up in a limo and took Anders away. He still owes me a Danish flag from a small wager he lost. I do plan to collect on that flag someday.
If you could convince someone to consider Delphi or C++ Builder what would your method be, how would you do it?
Could? Would? I actively try to convince people to use Delphi and C++Builder, at every opportunity.
I do a lot of straight API work for MSVC clients, so I include the RAD Studio project with the job. Clients do look at the project, ask about it, and often comment about how awesome the test code looks (in comparison). They seem to love the comment blocks inserted by C++Builder when you click to add a new event, and they also love the event naming. It’s all very clean.
At conferences, I often leave my laptop open and work on RAD Studio projects (even at both Linux fests) and always I always get questions about the product. You might be surprised to find how many Linux folks attending those conferences also code in Windows. I have hooked a few.
Convincing C++ programmers to take a look at C++ Builder is a snap. Just show them the IDE! Visual Studio users are consistently amazed at the speed and ease of using a true RAD development system, and Linux coders are often quick to admit they have a Windows VM available (so I show them FMX Linux). It works!
Delphi users often shy away from C++, when they should embrace the upgrade. The world is chock full of great C code that can be made available to Delphi via the upgrade.
Likewise, there is a wealth of great components written for Delphi that also work in C++Builder.
To me, it’s not a question of Delphi OR C++ Builder, but rather how best to use them together.
Which tech product do you wish you invented/designed and why?
The PDF (Portable Document File) format.
I have a deep love for developing typography, imaging, and publishing software.
PDF is vastly over complicated, and was designed primarily as a read only format, having very poor edit and conversion capabilities. The “Portable Document Format” should be easily portable for more than just viewing. The Import, editing, and conversion of a PDF often takes very special tools (such as our UberPDF product).
If you could live your life again would you still become a developer? Why?
I was born to code!
As a small child in the 1960’s, when most folks did not really know what a computer was, I was evaluated, and told I would “make a great computer programmer”. That assessment became the family joke – until I did become great computer programmer.
How many coffees do you drink a day and is it enough?
Tjoe has recently switched to “a cup of tea please – no sugar”.
I have totally given up coffee, after decades of “always on, always fresh Columbian coffee, available 24×7”.
Are you a night hawk who codes until late in the evening, a morning person who gets up early and right into or do you keep to some sort of regular office hours?
Night hawk! I love coding at night, in the dark. It’s cool, quiet, and the screen contrast is excellent! The timing also works well for my European clients.
In your career have you ever “pulled an all-nighter” to deal with something which absolutely had to be done?
Oh my! Yes!!! Many times. I once logged 121 hours in a single week for a customer.
Describe some of the best projects you’ve done as a developer.
I was a lead engineer at 7th Level, designing graphic gaming engines used by both 7th Level and Disney Interactive for several top titles, including “Ace Ventura”, “Battle Beast”, Howie Mandel’s “Adventures in Tuneland” series, “Timon & Pumbaa’s Jungle Games”, along with several Monte Python titles. It was a very entertaining and demanding position. When under the gun to get a title out, we would switch roles from coders to audio video editors, and got to work with the talent. It was not unusual to find yourself working with someone like David Gilmore from Pink Floyd or Howie Mandel to lay down a sound track. The Monte Python guys were cut-ups in real life (they needed no script – they lived life that way).
What is the most stupid question you get asked (none of these count!)
When I say I “specialize in graphics programming” I often get asked “Do you make tee shirts?”.
Do you quote for work with clients? If you do, without revealing anything which would make you uncomfortable what sort of process do you use?
Yes, I commonly quote work for customers.
The code needed to compete a job is either straight forward or requires additional research, evaluation, or a feasibility study.
I provide an outline to the customer explaining the minimum and expected time required for the known parts of the job, recommending caps for time spent on research and evaluation, and set “do not proceed further” limits for cases involving unknown feasibility.
I am very upfront on what I can guarantee, what I cannot guarantee, the job’s intended input and output, and I make very sure that no feature creep could somehow be rationalized as part of the existing job bid.
How do you stop clients/program managers/managers from ‘feature creep’?
I encourage well designed feature creep! That’s how exceptional features get made!
Software development is often a flowing artistic process, where you paint solutions for the problems that you encounter. These solutions often become excellent puzzle pieces that can provide low hanging fruit for new and exciting features to recommend to a client.
Describe a typical coding session for you. How does it start? Do you take breaks? Do you have any rituals/habits to accompany it?
First, remove your distractions, and get comfortable.
I always start my coding day with a small “warm up” session, by creating an empty project, and doing some sort of small experiment, trying out a new component, or playing with an IDE feature I wish to learn.
Next, look over your upcoming coding session (to help refresh where you are in the process), ready any research needed for your session, and try to break up the session into logical “completion steps” (where you will take your breaks).
While coding, if you do run into a hard to solve issue that requires thought, consider taking a break (and casually think about the problem and possibility solutions).
Finally, as you end your session, always drop in a comment line, explaining where you are leaving off, note any pending issues, what is up next, and always back up your work!
Do you listen to music while you code? If so, can you tell us a few tracks/artists/performances?
No. While I code, I am oblivious to my surroundings. I can code full force on a crowded Lido deck of a cruise ship at 5pm. I do love music, I play the guitar, and favor classic rock, jazz, and the blues. Favorite artists include Led Zeppelin, The Beatles, Diana Krall, and pretty much anyone doing a blues cover. I like polkas too!
Do you use any methods or techniques such as Agile, Scrum, Kanban, TDD? If so, why? If not, why?
Did you know TMS Software has an excellent Kanban board component?
Kanban adopts well to software development, it is simple and easy to implement.
Also, recommended techniques discussed in the book “Code Complete” by Steve McConnell, Microsoft Press has served me well over the years.
Do you track bugs? If you do, what do you recommend?
For sure I track bugs!
I’m old school, so unless the client has sent up a tracking system, I keep it very simple, using (at most) a three tier commenting system.
Comments at the top of a unit, comments in the code interface and implementation sections, and a bugs.txt file containing an overview to track them with.
If things get complex, I might use a Kanban template app that I have.
What is the best programming advice you have received?
From Anneke Leigh (Borland): “Don’t over study by trying to learn everything – it is not what you know, but rather how well you can use your resources to find an answer when you need it”.
From Heather Lathum (Borland): Take a few minutes to try out one Delphi component every day.
What’s the best question you’ve ever been asked at an interview and how did you deal with it?
Interview trick questions! I provide an overview of how to go about solving the problem (without working out the exact answer). If pressured for an exact answer, I explain that exact answers amount to work, and ask if they are ready start the job or billing cycle.
Have you ever had a technical interview which went super-smooth – if so, what’s your advice for others? If you’ve had a disastrous interview what went wrong and do you need a hug?
My favorite interview was at Borland! It went perfect, at all levels. It was like a dream come true.
The biggest disaster was for a large debugging contract that was videotaped at the white board. I gave away too much information on exactly how I was going to solve the company’s different coding issues (they used the solutions without me).
Next biggest disaster was at large interview meeting for a contract I really wanted, and they wanted me. I had the overwhelming approval of all but one (the director). Perhaps she was having a bad day, as I sensed some negative vibes and friction from her. I should have taken some initiative to change the tide, simply by having some additional interaction with her, but instead, I counted on majority rule for success (and lost).
Advice: Do not overdress, don’t give away your cards, and try to identify with anyone who may stand in the way of your success.
A good software developer:
Writes clear, concise code that is well structured and easy to understand.
Uses well named variables, procedures, and arguments.
Documents code that is not exactly clear as to its purpose.
Is always looking ahead for future opportunities to leverage the design of the code at hand.
A bad software developer:
Writes sloppy, confusing, poorly structured code that is difficult to understand.
Uses short, cryptically named variables, procedures, and arguments.
Leaves no latitude for future enhancement.
iPhone, Android, Other – and why?
I have them all. Personally. I would prefer “other”, although it’s hardly usable.
The iPhone is limiting, Android is more like living in the Wild West.
We live in a day where our phones should be able to function as a safe mobile computer, that you can plug into a full sized monitor and keyboard, and use it as a desktop.
The real Microsoft Windows desktop OS is capable of running on these tiny ARM devices, even running x86 applications in emulation mode, and can provide a reasonable user experience in most cases. I have used it.
It should be no surprise that a 4 core, 2 gigahertz board with a few gigs of RAM can indeed provide a reasonably good desktop experience.
Sure, a little ARM board is no rocket at serious number crunching, but in today’s time, we should be able to easily offload huge computational tasks to the cloud.
I sent two kids to collage with Windows RT on ARM tablets. It worked great, and the kids loved them. I still own those tablets, and still do a good job.
A tweaked Linux desktop can be almost magical on ARM.
It’s really a shame that a [lot] more work was not put into the Ubuntu Touch system. The world really needs a great mobile OS where the platform is not “owned”.
For a developer: PC vs Mac? Why?
What, no Linux Desktop option?
I am primarily a Windows developer, I do like Widows, but I am not at all happy with directions the OS has taken.
The Mac does a great job of serving VM’s of all types, however, I am not a big fan of OSX at all.
The truth? I run Linux as a desktop host, run Windows in a VM, and access OSX via VNC.
What is the one thing you would like to be remembered for?
Helping programmers, and brutal honesty.
Good or bad, I mean no harm, and wish only good to come from it.
I have lost clients due to code reviews using my red pen. Clients get the truth, however, I have had a few that actually desired the validation of bad practices.
What is the best developer/hacker/tech/geek movie?
I like documentaries about history and science. I did enjoy Stargate (both the movie and the series). I was given a real Stargate SG-1 military jacket, and sometimes get saluted when I wear it in public.
No developer should be seen without:
Delphi, Beyond Compare, and NotePad++. What more do you really need?
Oh, C++ Builder! Get the upgrade to RAD Studio!
If a movie was made about your life, who would you want to play you?
Glen Campbell or Jimmy Page.
Do you have a book, product or service you’d like to mention?
Dalija Prasnikar [Embarcadero MVP] has two very worthy books that every Delphi programmer should own: “Delphi Event-based and Asynchronous Programming” and “Delphi Memory Management for Classic and ARC Compilers”.
“Delphi Component Design” by Danny Thorpe is a must (even for C++ Builder users). Even if you are not designing components, there is a lot of gems to be found in the book.
The book “Code Complete” by Steve McConnell, Microsoft Press has served me well in learning to design and format code smartly to minimize bugs.
“Beyond Compare” by Scooter Software is an indispensable product available for all desktop platforms that also integrates nicely with the RAD Studio editor. Get the full product, and learn to use it!
TMS Software [Embarcadero Technology Partner] provides an almost endless list of great components for RAD Studio. The components are well designed, come with great support, and are updated frequently. They also have an “all access pass” that gets you everything in the TMS catalog. Tell them TJoe sent ya!
Do you have a website people can visit?
What’s your preferred method of contact from potential clients?
What a superb interview! Thanks for talking to me Joe.