What is .NET Framework?

The .NET Framework is a set of libraries you can use when you program in certain languages like C# or VB.NET. I list this item separately from those languages because it highlights the important fact that knowing the language and the familiarity with the framework classes may come hand-in-hand, but they are a separate set of skills.

What is Java?

I played with making Java applets for a couple summers in college. I liked how I could render shapes on the Canvas element, and I often fantasized about making games, but stopped short at just making circles fly around, gravitate, collide, etc. Java looks like this:

public class PE1 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i < 1000; i++)
            if (i % 3 == 0 || i % 5 == 0)
                sum += i;

I never worked with Java professionally, but I'm still comfortable enough to make changes in Java programs and occasionally code a console app using javac on the commandline if my options are limited and I don't want to deal with C/C++ style strings.

Note: Java and JavaScript ("JS") are not the same thing. They're pretty dissimilar, in fact!

What is C?

C is an older language than most of what’s on my resume. C programs look like this…

int main(void)
  int i = 1;
  int sum = 0;
  while (i < 1000)
   if (i % 3 == 0 || i % 5 == 0)
    sum = sum + i;
   i = i + 1;
  return 1;

And C++, C's slightly more modern counterpart, looks very similar:

using namespace std;
int main()
        int sum = 0;
        for (int i = 1; i < 1000; i++)
                if (i % 3 == 0 || i % 5 == 0)
                        sum += i;
        cout << sum << endl;

I picked up C in high school from Sam's Teach Yourself C in 21 Days. Suffice it to say, it took longer than 21 days. I still remember Chapter 9 - pointers - was very hard to understand at the time. Hell, they're still hard to remember sometimes, now that I use mostly memory-managed objects! I learned C++ in college, then Java seemed like the next logical choice to pick up and play with. Java is syntactically very similar to C/C++. In fact, this is often called "C-family" syntax.

What is Shell Scripting?

In many Linux distributions, you can happily start coding right on your command line. That code often looks something like this…

for i in {1..999}
    if (( $i % 3 == 0 || $i % 5 == 0 ))
        let "TOTAL = TOTAL + i"
echo $TOTAL

I technically learned how to use command lines the first time I typed lines of AppleBASIC into our family computer back on the farm. But it was really in high school when I started to learn the glories of piping commands together to take advantage of what it can really do.

In Windows, there used to be only DOS Batch scripting, but now there’s Powershell, which is both more powerful (as the name would imply) and more readable. For example:

# PE1.psl
$total = 0
for ($i = 1; $i -lt 1000; $i++) {
	if (($i % 3 -eq 0) -or ($i % 5 -eq 0)){
		$total = $total + $i
Write-Host $total

What is SQL?

Most SQL looks like this…

SELECT * FROM table WHERE column = 'value'

But it can also look like this…

SET @Sum = 0
SET @I = 1
WHILE @I < 1000
    IF (@I % 3 = 0) OR (@I % 5 = 0)
        SET @Sum = @Sum + @I
    SET @I = @I + 1

SQL is mostly about data -- creating, changing, and retrieving it, for example. When someone says, "I saved it to the database," there's often some sort of SQL involved. I first learned a version of SQL (mySQL) in the year 2000 for a side project in college using PHP to connect a web page to some statistics of some sort. Since then, it has been enormously useful and building reports, answering questions, and generally serving as the meat-and-potatoes backbone of data-oriented (read: almost all) software systems. There are several popular versions of SQL. For example, I'm most familiar with the Microsoft version, MS-SQL or T-SQL. MySQL is also popular, and I'm somewhat familiar with that, too. But the variants are largely similar, so most people who "know SQL" are familiar with at least one.

What is VB?

What is Visual Basic (VB)?

VB, VBA, VBScript, VB.NET, etc is a programming language where the code looks similar to this…

Dim sum
sum = 0
For i = 1 to 999
    If (i Mod 3 = 0) OR (i Mod 5 = 0) Then
        sum = sum + i
    End If
MsgBox sum

Depending on the context of how you are running the code (windows script host or .NET framework or Excel macros), it gets called different things and there are some heavy nuances to how you write it. But I consider it one fundamentally same thing with minor differences across the versions. Basic has been around forever, and AppleBASIC was the first language I ever played with in the 80s. VB is kind of dated, though, and I do prefer to use C# in places where I can get away with it. But you often can sneak vbscript in places where you can’t get C# to play nice, so it’s a good skill to have.

What is C#?

C# code looks like this:

using System;
namespace PE1
    class Program
        static void Main(string[] args)
            int sum = 0;
            for (int i = 1; i < 1000; i++)
                if (i % 3 == 0 || i % 5 == 0)
                    sum += i;

I learned C# in 2003 at a small banking software company in Lincoln. It is often my go-to language for writing console applications on Windows. Most of my jobs for the last 15 years have centered largely around my ability to program effectively in this language, along with HTML, Javascript, and SQL. I'll tell you a little secret, though... most C# code I have to maintain, I don't like looking at. Most of it is junk with very little organizing principles holding it together, or has inconsistently-enforced development patterns strewn through their libraries. I'm just as guilty as the next person, but I really do prefer to keep data manipulation and querying in SQL, front-end manipulation in Javascript, and the controlling aspect in C#. This means that at the end of the day, I try to avoid writing any C# code. 🙂

What I Can Do

The Big List of Skills

I have this list. It’s a big pile of words. Here:

C#, .NET, MS-SQL, REST APIs, JS, JS frameworks (D3, C3, Kendo, Knockout, Angular, jQuery, Require, FontAwesome), HTML, CSS, VS, VSO, Azure, git, Trello, kanban boards, agile planning, spreadsheets, word processing, raster graphics (GIMP, Paint.NET, ImageMagick), vector graphics (HTML SVG, Visio), Code 39, HL7, Raspberry Pi, Ubuntu Linux, Node, Powershell, bash/tcsh, Axure, rapid prototyping, usability testing, VB.NET, VBA, VBScript, JScript, WSH, Perl, PHP, SSRS, MS Access, Crystal Reports, COM, DCOM, XML/XSLT, BaseCamp, LeanKit, TFS, ADO.NET, TDD, Wireshark, Content Management (WordPress, Drupal, PHP Nuke, DNN, MediaWiki), ISAPI, Legacy IIS, C, C++, R, Maple, Apache, Unix, DOS, MacOS, VSS, SVN, TL;DR, right?

I sometimes put this in my resume as a single section, but what does this all mean? Learning about technology has occupied a large part of my life, so there are stories behind each of them. Please read through if you would like a better feel for how I came to be the developer that I am today.

1979-1998, Nerdy Kid

2 TOTAL = 0
3 FOR I=1 TO 999
4   IF I MOD 3 = 0 THEN
5        TOTAL = TOTAL + I
6    ELSE
7       IF I MOD 5 = 0 THEN
8          TOTAL = TOTAL + I
9       ENDIF
10   ENDIF

Our family’s Apple IIe was a hand-me-down piece of junk, but it was functional enough for me to learn the rudiments of AppleBasic. Knowing that you can teach a computer new tricks by typing commands is a powerful lesson. Around the same time, we also learned Logo (the “turtle game”) in school. (I’m happy to see my own kids learning to program in Scratch at this age now.)

I grew up with the command line. My first copy of Windows ran “on top” of MS-DOS rather than the other way around. Learning how to open a console and get a listing of files is usually one of the first things I like to learn about any new system. It just feels comfortable and familiar. I can get around passably in 99% of the computers I encounter. I don’t think I’ve ever encountered a BeOS computer, but if I sit down in front of any Windows, Mac, or Linux device, I can start writing and running some form of code in a matter of minutes.

My first “real language” was as a teenager. I picked up C from a “Teach Yourself” book in high school, which allowed me to skip the introductory programming course in my first semester of college.

1998-2005, CS Student

My first attempts at undergraduate education were in Chicago, at IIT. I was a Computer Information Systems student for one semester there, then went back home to take some core courses at Wayne State College in my hometown of Wayne, Nebraska. I ended up finishing the vast majority of my degree over the course of many years at UNL in Lincoln, Nebraska.

I learned to really love experimenting with new languages around this time. I picked up a habit of working through online “programming challenges” around this time, and used the Project Euler problem #1 (the iconic “Fizz-Buzz” problem) as my basis for learning dozens of popular (as well as obscure) languages, programs, and platforms.

	.globl main
	li   $t0, 0		# int counter = 0;
	li   $t1, 0		# int sum = 0;
	li   $t2, 3     	# int three = 3;
	li   $t3, 5     	# int five = 5;
	li   $t4, 1000		# int stop = 1000;
	addi $t0, 1		# while (++counter != stop)
	beq  $t0, $t4, end	# { 
	div  $t0, $t2		#  if (counter % three == 0)
	mfhi $t5		#  
	bne  $t5, $0, five	#  {
	add  $t1, $t1, $t0	#    sum += counter;
	b    while		#  }
five:				#  else
	div  $t0, $t3		#  if (counter % five == 0)
	mfhi $t5		#  
	bne  $t5, $0, while	#  {
	add  $t1, $t1, $t0	#    sum += counter;
	b    while		#  }
				# }
	li   $v0, 1		# print int
	move $a0, $t1		#
	syscall			#

For example, this is MIPS assembly for PE#1.

I also learned an important trick that I encourage any would-be programmers to keep in mind: almost any question you can answer with code, you can answer with a clever application of a basic spreadsheet program like MS Excel or OpenOffice Calc. Don’t underestimate spreadsheets and the people who become experts at using them.

I picked up on Perl and PHP heavily at this time, played at consulting for web development, and learned how to write basic queries and design relational tables in MySQL. This, more than any of the academics I went through in college, was of huge practical value in becoming a professional web-based systems programmer.

I picked up my first professional job around this time at a banking software place named Automated Systems, Inc (ASIweb.com). I learned a lot about professional development practices, and that sustained me as I switched over to the healthcare industry for the next decade.

2005-2015, Healthcare Software Systems

I had the good fortune to work for people I really respected at Nebraska Heart Hospital (NHH/NHI) and Columbus Regional Health (CRH). Working for the healthcare industry really helped me connect my day-to-day activities with the value it brought to the end-users. Seeing forms, assessments, studies, calculators, and integration tools being used in the patient care documentation pathways made me feel warm inside. Most programming jobs have little to do with individual care, and it resonated with me. So I spent a decade working first at Nebraska Heart, and then for Columbus as a remote software consultant.

At Nebraska Heart, our IT department was lean and hungry for challenges. I thrived in that environment as budgets were often tight and creative solutions were encouraged. (Many of my strengths lie in seeing the boundaries of a problem rather than getting caught too quickly in minutiae.) I helped to develop and RFID-linked tracking system for paper medical charts while they were undergoing scanning and abstraction for implementation of electronic medical records (EMR). I kept updated the internal ticketing systems used by a handful of service departments, managed a sizable resource-to-group mapping system for login scripts, maintained a document scanning kiosk application, and built numerous individual integrations between disparate systems at the hospital and institute. It was a blast having such a variety of things to focus on.

I kept the flames burning for this same kind of work when I transitioned to a consulting role for Columbus Regional Health in Columbus GA. There I repeated my performance of building and maintaining the internal ticketing system, and built a variety of reports, documentation delivery/ETL, and system integrations. I really enjoyed the camaraderie of the IT department at both facilities. Good people all around. It was hard to leave, but it was definitely time to work locally again. I also felt that having been a programmer/analyst may have put me at a slight disadvantage in career potential as a programmer. Managing software environments is treated very differently in healthcare-centered places than in places where the technology takes a more central role. So I left the comfort of healthcare and have been searching for a new niche ever since.

2015-Present, Software Professional

I served a brief stint at Nelnet Business Services in Lincoln, NE. I did learn quite a bit about managing source control with git, Slack-integrated build notifications with TFS/VSO, and it was a friendly environment. I had a lot to learn about the day-to-day operations of a professional software environment. Sadly, I did not stay there for long enough to find out more.

Around this time I met Steph (we are now married), and she lived in Omaha. We had a whirlwind romance and I moved in with her despite having a house in the Lincoln area. I loathe the LNK/OMA commute, so I wished NBS fond farewell and found local work in Omaha at one of my all-time favorite companies, Farm Credit Services of America (FCS America).

Farm Credit Services of America is an outstanding place to work in Omaha, and I highly recommend it to anyone looking for a home as a developer. The culture is top-notch and they take excellence very seriously. I felt like I was able to meaningfully contribute fairly quickly, working on a number of complex integration questions with a third-party database application, providing deep QA on related non-database integration for the same app, and acting as a main point of contact for changes to a document conversion utility. This was all mostly SQL and C# with a little Angular thrown in at the end for good measure. I was happy to see that any concerns I had were taken seriously right away, and I feel like I could have stayed much longer but for the second episode of Clay Hates Commuting.

At this time, I was dropping my kids off at school in Lincoln, climbing in the car at 6am, dropping them off at their mother’s house at 7am, and driving back to work in Omaha by 8am. I would do it all in reverse in the evening. Leaving Lincoln for Omaha was not quite the cake walk I had hoped for. I was also having troubles selling my house in Bennet, all the while paying rent with Steph and mortgage on the vacant house. It was too much to handle. Luckily when we married in December of 2015, we had a conversation about how to handle all of these things and wound up moving in together at Bennet. Now all of our children attend a single school six blocks away and the only complication remaining was that I was again faced … with a LNK/OMA commute. :\

I began to look for Lincoln employment, and found that a friend of a friend was looking to start a healthcare analytics company. Wow! But sadly, it was in Omaha. So I was inclined to pass, but we instead worked out a deal for telecommuting, and I began scaffolding out the framework that would become their reporting and data-collection application for their start-up. And here I have been since 2015, pounding away at feature after feature, report after report, ever since. I’ve learned a ton about Azure, solidified my love of C#, SQL, and Javascript, and I have a newfound respect for entrepreneurs who can manage to take an idea and build a company out of it.