How to rate my development skills?

M

Marcin Wiszowaty

Hello,

I am male 24
i graduated with a batchelors in computer science in december of 07.
long island NY

this is my first job in this field
have been working as a junior programer for past 4 months (VB.net, sql,
web(asp html css development)
its a small and other programers are older unix guys so i dont know how to
compare myself to them
started at $40k per year 3 month review brought me up to $43k for
35hrs/week
have to spend alot for health benefits
1.5 paid days off per month <-- also coment at my salary please

i have no idea weather i am where i should be in my carrear/ability level.
how do you guys judge your abilities and how much time do you spend working
how much time do you spend learning your craft of development/programing

also it recently took me aproximately 8 hours to write a vb probram that
takes a textfile as input (the file was a report format so some lines are
sumations and breaks which i had to seperate out from real data) code below.
I tried to make it general since i will probably will have to reuse alot of
this code for similar projects in the future here.
I might have spent too much time making it this general so that i can reuse
it later.
I spent about an hour just learning the report so that i know what to put
whre in my db.

I beleive that the next similar project i could do in 2hours tops because i
have this base.

it basicaly reads a table which tells it the directory of files to run. the
name pattern of files to process and which key to apply for that file.
for each record in this table the program looks in the directory. If there
is a file it will pull the key information and the other records of data
that we want to save.
it opens a file.
it reads a line
checks the line to see if it is a header (i want 1 peice of data from 1 type
of header repeated throughout the document)
if not a header then check if the line is the lenght that the key says it is
supposed to be
if lenght match then run it into a key. if ran through key correctrly than
add to a dataset
after a file processed update the dataset(write the new records, alter
existing records if changed)
move on to next fiele,
move on to next run entry

i still have to add some error handeling.
here is the code

Imports System.IO

Module Module1

#Region "Variables"

Dim pc As New ProcessControl.ProcessControl

Dim dp As New DPwriteoffs

Dim elf As ELF.ErrorLogFile

Dim dsrun1 As dsRun

Dim dskey1 As dsKey

Dim dswriteoffs1 As dsWriteoffs

Dim batchname As String

Dim starttime As String

Dim blntest As Boolean = True

Dim pcnumber As String

#End Region

#Region "statistics variables"

Dim filesempty As Integer = 0

Dim blnfilegood As Boolean = True

Dim files As Integer = 0

Dim filesgood As Integer = 0

Dim filesbad As Integer = 0

Dim blnlinegood As Boolean = True

Dim fileslines As Integer = 0

Dim fileslinesgood As Integer = 0

Dim fileslinesbad As Integer = 0

Dim lines As Integer = 0

Dim linesgood As Integer = 0

Dim linesbad As Integer = 0

#End Region

Sub Main()

Try

batchname = pc.CreateBatchName()

starttime = Now.ToString()

pc.AddProcess(pcnumber, batchname, "OK", "", "", starttime, "", 0, 0, 0, "")



dsrun1 = dp.getrundata

Dim runrow As dsRun.TwriteoffrunRow

For Each runrow In dsrun1.Twriteoffrun

Try

Dim dirinfo As New DirectoryInfo(runrow.directory)

Dim f() As FileInfo = dirinfo.GetFiles(runrow.namepattern)

If f.Length > 0 Then

dskey1 = dp.getkey(runrow.keytouse)

dswriteoffs1 = dp.getwriteoffs

For Each filei As FileInfo In f

readfile(filei.FullName)

Next

End If

Catch ex As Exception

elf = New ELF.ErrorLogFile("WriteoffPrep_" & Now.ToString("yyyyMMddhhmmss"),
runrow.directory)

elf.writetolog(ex.ToString())

End Try

If Not dswriteoffs1 Is Nothing Then

dp.updatewriteoffs(dswriteoffs1)

End If

Next

Catch ex As Exception

elf = New ELF.ErrorLogFile("WriteoffPrep_" & Now.ToString("yyyyMMddhhmmss"),
"c:\")

elf.writetolog(ex.ToString())

End Try

End Sub

Public Sub readfile(ByVal fullname As String)

Try

Dim groupclient As String

Dim writeoff As dsWriteoffs.TwriteoffRow

Dim datalinelenght As Integer = addwhatlineissupposedtobe()

Dim line As String

Dim reader As StreamReader = File.OpenText(fullname)

line = reader.ReadLine()

While Not line Is Nothing

Dim blnkeywork As Boolean = False

writeoff = dswriteoffs1.Twriteoff.NewTwriteoffRow

If Not Trim$(line) = "" Then

If Not isrptheader(line) = 1 Then

If isrptfooter(line) = 1 Then

Exit Sub

Else

If Not ischunkheader(line) = 1 Then

If line.Length = datalinelenght Then

writeoff.client = groupclient

trykey(writeoff, line)

writeoff.id = dswriteoffs1.Twriteoff.Rows.Count + 1

writeoff.filename = fullname

writeoff.writeoffdate = datefunc(fullname)

dswriteoffs1.Twriteoff.AddTwriteoffRow(writeoff)

Else

'line not important

Dim sss As Integer = 0

End If

Else

groupclient = findclient(line)

End If

End If

End If

End If

line = reader.ReadLine()

End While

reader.Close()

Catch ex As Exception

elf = New ELF.ErrorLogFile("WriteoffPrep_" & Now.ToString("yyyyMMddhhmmss"),
Path.GetDirectoryName(fullname))

elf.writetolog(ex.ToString())

End Try

End Sub

Public Function datefunc(ByVal line As String) As Date

Dim ddate As Date

Dim str As String

str = line.Substring(InStr(line, "sys1") + 3, 6)

str = str.Substring(2, 2) & "/" & str.Substring(4, 2) & "/" &
str.Substring(0, 2)

ddate = Date.Parse(str)

Return ddate

End Function

Public Function findclient(ByVal line As String) As String

Dim pos As Integer = InStr(line, "CLIENT:")

Return line.Substring(pos + 6, 4)

End Function

Public Function ischunkheader(ByVal line As String) As Integer

Try

If line.Substring(0, 7) = "# PHYS" Then

Return 1

End If

Catch ex As Exception

Return 0

End Try

End Function

Public Function isrptheader(ByVal line As String) As Integer

Dim rptheader As String = "E&l1O(s16.667H&l5.667C"

If Trim$(line) = Trim$(rptheader) Then

Return 1

Else

Return 0

End If

End Function

Public Function isrptfooter(ByVal line As String) As Integer

Dim rptheader As String = "E&l1O(s12.5H &l5.667C"

If Trim$(line) = Trim$(rptheader) Then

Return 1

Else

Return 0

End If

End Function

Public Function trykey(ByRef row As dsWriteoffs.TwriteoffRow, ByVal line As
String) As Boolean

Dim keyrow As dsKey.TWriteoffsKeyRow

For Each keyrow In dskey1.TWriteoffsKey

Dim dbcolumn As String = LTrim$(RTrim$(keyrow.dbname))

Dim str As String = line.Substring(0, keyrow.lenght)

line = line.Remove(0, keyrow.lenght)

If LTrim$(RTrim$(str)).Length > 0 Then

Select Case keyrow.type

Case "s"

If dbcolumn.ToUpper = "NAME" Then

row.firstname = Trim$(str.Split(",")(0))

row.lastname = Trim$(str.Split(",")(1))

ElseIf dbcolumn.ToUpper = "FILLER" Then

' do nothing with this data

Else

row.Item(dbcolumn) = LTrim$(RTrim$(str))

End If

Case "i"

Try

If InStr(str, "-") Then

str = str.Replace("-", "")

row.Item(dbcolumn) = 0 - Integer.Parse(LTrim$(RTrim$(str)))

Else

row.Item(dbcolumn) = Integer.Parse(LTrim$(RTrim$(str)))

End If

Catch ex As Exception

elf.writetolog("Integer parsing unsuccesfull : " & dbcolumn & vbCrLf & str)

End Try

Case "d"

Dim ddate As Date

Dim year As String

Dim month As String

Dim day As String

Try

If InStr(str, "/") Then

ddate = Date.Parse(str)

Else

If (Integer.Parse(str.Chars(0) & str.Chars(1))) > 12 Then ' year first than

year = str.Substring(0, 4)

month = str.Substring(4, 2)

day = str.Substring(6, 2)

Else

year = str.Substring(4, 4)

month = str.Substring(0, 2)

day = str.Substring(2, 2)

End If

ddate = Date.Parse(month & "/" & day & "/" & year)

End If

row.Item(dbcolumn) = ddate

Catch ex As Exception

elf.writetolog("Date parsing unsuccesfull : " & dbcolumn & vbCrLf & str)

blnlinegood = False

End Try

Case "e" ' if the date is saved as string

Dim ddate As Date

Dim year As String

Dim month As String

Dim day As String

Try

If (Integer.Parse(str.Chars(0) & str.Chars(1))) > 12 Then ' year first than

year = str.Substring(0, 4)

month = str.Substring(4, 2)

day = str.Substring(6, 2)

Else

year = str.Substring(4, 4)

month = str.Substring(0, 2)

day = str.Substring(2, 2)

End If

row.Item(dbcolumn) = (month & "/" & day & "/" & year)

Catch ex As Exception

row.Item(dbcolumn) = str

blnlinegood = False

elf.writetolog("Date parsing unsuccesfull : " & dbcolumn & vbCrLf & str)

End Try

Case "f"

Try

If InStr(str, "-") Then

str = str.Replace("-", "")

row.Item(dbcolumn) = 0 - Double.Parse(LTrim$(RTrim$(str)))

Else

row.Item(dbcolumn) = Double.Parse(LTrim$(RTrim$(str)))

End If

Catch ex As Exception

elf.writetolog("Double parsing unsuccesfull : " & dbcolumn & vbCrLf & str)

blnlinegood = False

End Try

Case Else

blnlinegood = False

'elf.writetolog("There may be a problem with a key. Review the bill key &
file " & filename & " & line " & linesgood + linesbad)

End Select

End If

Next

End Function

Public Function addwhatlineissupposedtobe()

Dim i As Integer = 0

Dim row As dsKey.TWriteoffsKeyRow

For Each row In dskey1.TWriteoffsKey

i = i + row.lenght

Next

Return i

End Function

End Module
 
M

Mr. Arnold

Marcin Wiszowaty said:
Hello,

I am male 24
i graduated with a batchelors in computer science in december of 07.
long island NY

this is my first job in this field
have been working as a junior programer for past 4 months (VB.net, sql,
web(asp html css development)
its a small and other programers are older unix guys so i dont know how to
compare myself to them
started at $40k per year 3 month review brought me up to $43k for
35hrs/week
have to spend alot for health benefits
1.5 paid days off per month <-- also coment at my salary please


Look, you have not paid your dues. You have no expertise per say. What you
should do is get a couple of years under your belt, because that's what
hiring managers look for is a track record of proven abilities and skill
sets. You should be happy you got a job using .Net technology period,
because mostly, they are looking to hire someone with a proven record with
..NET and not entry level.

That bachelors doesn't mean jack now. What will count now is a proven track
record, your ability to enhance your skill set with new technology, and what
type of business solutions you have worked on as a programmer.
 
F

Family Tree Mike

Well, if you graduated in Dec 07, but have four months experience, and have
had a three month review, you must have started before you graduated. This
is Jan 08. Was this an intern job?

As to your current abilities, I would ask you whether you were simply told
what to code, or were you asked to analyze and solve a problem.

If you can state how you analyzed the requirements, developed a design to
meet the requirements, and implemented a design, then your skills are moving
forward.

If they basically described a black box that has an ingress taking this text
file, and an egress looking like this other file, and you took the time
stated, then I would say you earned your keep, but that is not preparing you
for the real world.
 
K

Kevin Spencer

Hi Marcin,

As mentioned in another reply, you are fortunate to have a job at this
point, and should consider your salary a gift of sorts (at least the fact
that you are earning one at this point).

Programming skill is not obtained by going to school. When you go to school,
you learn a lot of theory, which is a good thing, and you get just a taste
of actual programming experience. But actual programming skill comes as a
result of years of practice and study on your own. Years, not months. As for
how much of your time you should spend on learning your craft, the answer
is, as much as you possibly can. Programming is not a job, it is a career,
and to become a good programmer, it must nearly be an obsession.

You can learn a lot from these "older unix guys," and I would suggest that
you ask them as much as you can without irritating them. While the Unix
platform is a great deal different than the Windows platform, programming is
programming. And because the Unix platform doesn't have all of the nice
tools and pre-built components that exist in the Windows platform, those
Unix guys have to have a lot of skill to accomplish what they do. Believe it
or not, all of the components and conveniences available on the Windows
platform, as useful and powerful as they are, can be as much of a crutch and
a liability as they can be a help. Don't get me wrong: I wouldn't switch to
Unix for a king's ransom. Productivity is essential to success. Having a big
sword is great, but knowing how to sharpen and wield it are much more
important.

Analytical skill is something you cannot be taught. To recognize patterns,
you really have to study a whole bunch of them. I don't know any developer
who can't look at his/her work of several years ago and not be embarrassed
by the quality of it. I've been a developer for nearly a dozen years now,
and I can still look at my work of several years ago and cringe. It's not
that the quality of it is bad; bad is a relative term. It's that I am
capable of much better work now, and I don't know if that ever changes over
the career of a developer.

Murphy is a programmer's constant companion. Whatever can go wrong will go
wrong. Learning how to make chicken salad out of chicken s**t is the chief
skill of the programmer. While the principles of programming are essentially
simple, like the rules of the ancient Japanese "Go" game, the practical
application of those rules is enormously complex.

As far as I know, it never gets easier, no matter how hard you work, no
matter how long. Your challenges will always rise to exceed your skill
level. The only way to advance is the hard way: hard work. It helps if you
love what you do, because you'll have to do an awful lot of it to get
anywhere. Those who are best at it are those who love it. It's a love/hate
relationship.

If you got into the craft for the money, you're already in trouble. Yes, it
pays well. But there's a darned good reason for it. Like Doctors, Lawyers,
and Accountants, you will have to work awfully hard to earn it. It's a
marathon, not a sprint.

--
HTH,

Kevin Spencer
Chicken Salad Surgeon
Microsoft MVP
 
M

Marcin Wiszowaty

sorry.
I actualy graduated in Dec06

Your coments are very true. I noticed that when i was looking for a job that
my education didnt mean much.
They didnt ask for gpa or anything.(since it wasnt great i did not list on
resume)
I thought that i wasted money cuz could have gone to a few week long boot
camp(cost about the same) and had a better chance of geting a job.
Made me take a test though which was somewhat hard at the time because i did
very little programing in school. And what i did i did in c#. I just
remembered that the other day when they hired a new guy and think that that
test would be a snap now.

For this project and all others that i have done here they dont guide me
much at all. Only advice when I have a real problem I cant solve and I ask
them for help. For this one the guidelines were: We have this report done in
unix that we print every day and now want to put it on a webpage so as to
stop waste of paper. So the problem was the text format was created to be
interpreted visualy. I had to do instr(xxx) statements to find some of the
data and make sure the data was being interpreted correctly. Put that into a
table.
Sum that table into another table(code not shown cuz doing that now).
I started a webpage to display the table so that will be realy easy. Just
copy and alter few things.

So i thought you might coment on 2 of my aproaches there. I dont much like
looking at other people's code either so i guess that is why you did not
coment on code specificaly

1- The program is sql table driven.
The runs depend on entries in a table.
We have a filewatcher program so when that sees new files it will kick off a
..bat job to run my program.
My program will take a row of data which is the name patern, directory and
key associated with run.
The key is another table which tells this program which piece of a line of
data coresponds to which db table, the lenght and type.
The keydata from run row is a foreign key from other table so multiple keys
are stored and pulled as needed.
So use that information to get the what lenght the data line in text is
supposed to be. If it matches that lenght parse the fields into strings,
integers, floats and some custom checks.
Then do that again for another row.

I did this so that if the key changes i could just add another entry or
alter one and they basic reading of textfile stays the same. I have also
copied and pasted this to use in 2 other simple text read programs. When its
just about perfect i will try to make this into a dll.
So is this overkill for a simple text read?


2- I am using the visual studio datasets and data adapters and their stored
procedure genarator. So if lets say the size of the Name field the db
expands i will have to chnge my program and recompile to save the biger
lenth. I noticed some other code writen diferently that would not have this
problem. But my way alows me to use intelisense. The error handeling
generated is very good. I just add minor try catches. And the
inserts/updates are alot faster when dealing with alot of data. I can put
like 200k rows in a table in less than a minute. Geting each line of data at
a time than pasing to insert statements one at atime would take much longer
no? I know that eventualy i will have to master both and use depending on
situation. This way is easier for me now.

Also still looking for answer to how much time you guys spend learning new
technology/techniques or do you just learn along the way.

Also i guess that i just dont want to be average. I would either like you to
praise(for lack of better word) my skills or criticize them. I know you
havent seen much these skills buy try please.

Also i am a very visual learner so if any of you know any learn resources
like learnvisualstudio.net where you learn by seeing and listening rather
than reading please post links. Free/cheap webinars etc.
 
F

Family Tree Mike

Marcin,

I tried to take a stab at this. See my notes below...


Marcin Wiszowaty said:
sorry.
I actualy graduated in Dec06

Your coments are very true. I noticed that when i was looking for a job that
my education didnt mean much.
They didnt ask for gpa or anything.(since it wasnt great i did not list on
resume)
I thought that i wasted money cuz could have gone to a few week long boot
camp(cost about the same) and had a better chance of geting a job.
Made me take a test though which was somewhat hard at the time because i did
very little programing in school. And what i did i did in c#. I just
remembered that the other day when they hired a new guy and think that that
test would be a snap now.

For this project and all others that i have done here they dont guide me
much at all. Only advice when I have a real problem I cant solve and I ask
them for help. For this one the guidelines were: We have this report done in
unix that we print every day and now want to put it on a webpage so as to
stop waste of paper. So the problem was the text format was created to be
interpreted visualy. I had to do instr(xxx) statements to find some of the
data and make sure the data was being interpreted correctly. Put that into a
table.
Sum that table into another table(code not shown cuz doing that now).
I started a webpage to display the table so that will be realy easy. Just
copy and alter few things.


Hands off management can be good, but it can lead to falling into bad
habits. It sounds like you are trying to make sure this doesn't happen, to
which I give you credit.

I just want to point out that I wouldn't hire a developer just by bootcamp
like training. You have to look at the whole picture.


So i thought you might coment on 2 of my aproaches there. I dont much like
looking at other people's code either so i guess that is why you did not
coment on code specificaly

1- The program is sql table driven.
The runs depend on entries in a table.
We have a filewatcher program so when that sees new files it will kick off a
..bat job to run my program.
My program will take a row of data which is the name patern, directory and
key associated with run.
The key is another table which tells this program which piece of a line of
data coresponds to which db table, the lenght and type.
The keydata from run row is a foreign key from other table so multiple keys
are stored and pulled as needed.
So use that information to get the what lenght the data line in text is
supposed to be. If it matches that lenght parse the fields into strings,
integers, floats and some custom checks.
Then do that again for another row.

I did this so that if the key changes i could just add another entry or
alter one and they basic reading of textfile stays the same. I have also
copied and pasted this to use in 2 other simple text read programs. When its
just about perfect i will try to make this into a dll.
So is this overkill for a simple text read?

This seems resonable, though I would lean towards XML configuration. If you
have other uses for this type of data, then a common data table could be
beneficial.

2- I am using the visual studio datasets and data adapters and their stored
procedure genarator. So if lets say the size of the Name field the db
expands i will have to chnge my program and recompile to save the biger
lenth. I noticed some other code writen diferently that would not have this
problem. But my way alows me to use intelisense. The error handeling
generated is very good. I just add minor try catches. And the
inserts/updates are alot faster when dealing with alot of data. I can put
like 200k rows in a table in less than a minute. Geting each line of data at
a time than pasing to insert statements one at atime would take much longer
no? I know that eventualy i will have to master both and use depending on
situation. This way is easier for me now.

In every case you will have tradeoffs. The important thing to understand is
what is being done under the hood. There is a middle ground which is coding
stored procedures yourself, or using bulk insert commands. Singleton insert
commands aren't the way to go, unless you have only a handful of rows to
insert. (I tend to stay out of database issues though, as others on our team
focus there.)

Also still looking for answer to how much time you guys spend learning new
technology/techniques or do you just learn along the way.


Personally, I learn the new stuff as I go. I'm anxious to apply some of the
new stuff in LINQ and the rest of C# 3, but our developement platform is
still at VS 2005 for the next few months. I code some home utilities with
the latest stuff to get up to speed on new techniques, mostly found by
reading the MVPs posts on these boards. The longer you are with a job, the
more you are expected to pick up on your own.
Also i guess that i just dont want to be average. I would either like you to
praise(for lack of better word) my skills or criticize them. I know you
havent seen much these skills buy try please.

Also i am a very visual learner so if any of you know any learn resources
like learnvisualstudio.net where you learn by seeing and listening rather
than reading please post links. Free/cheap webinars etc.

Frequent the boards here (dotnet.languages.vb, dotnet.languages.csharp) and
try to code to the questions that are asked, but also experiment with the
answers supplied. It's kind of like batting practice for a baseball player.
(OK, I know it isn't baseball season.).
 
K

Kevin Spencer

Hi Marcin,

Family Tree Mike gave you some good feedback, so I won't reiterate any of
that. But I will make a few observations of my own.
stop waste of paper. So the problem was the text format was created to be
interpreted visualy. I had to do instr(xxx) statements to find some of the
data and make sure the data was being interpreted correctly. Put that into
a table.

I take it that by "the text format was created to be interpreted visualy"
you mean that the data is in text files, and that there is typed data, such
as numbers and/or dates in the text, which you need to extract. Is that
correct? I will assume that it is for now. Have you considered using Regular
Expressions for this purpose?
We have a filewatcher program so when that sees new files it will kick off
a .bat job to run my program.

This seems a bit kludgy. It sounds like what you need is a Windows Service
that hosts a FileWatcher, and can run the process. Don't spend too much time
second-guessing yourself, however. We all live in the real world, and
nothing we accomplish can be perfect within the real limitations we work in.
As time goes by, your solutions will improve. With some luck, you may have
the opportunity to revisit some earlier solutions and improve them. But
mostly, you will simply keep moving forward, and your solutions will improve
with experience.
Also still looking for answer to how much time you guys spend learning new
technology/techniques or do you just learn along the way.

I did answer that question when I said "as much as possible." That may seem
like a fuzzy answer, but it is literally true. I spend every spare minute
that I can, both at home and at work, honing my craft in various ways. At
home, of course, some time must be spent in rest and relaxation, both of
which are vital to keeping your brain in good working condition. Often, a
problem will be solved unconsciously while you rest or sleep. But I also
study, and create small software projects that serve both practical purposes
and provide practice, as well as being fun. For example, last week I spent
about 3 days writing a little puzzle-type game. Some months ago I wrote a
configurable timer app with wav file alarms to help myself and my wife with
our cooking. And so on.

At work, I research as I go when I need to, which is often, since there is
so much to learn, and technology continues to evolve. I don't get to spend
nearly as much time as I'd like to in research, as I must also accomplish my
goals, so there is a balance there. I have literally hundreds of Favorites
in my browsers, organized in hierarchical trees of subject matter. I get
trade magazines, and keep them in the company bathroom, so I can study while
doing "other things." And participating actively in communities such as this
is a great way to learn and network. Don't think that your lack of expertise
will prevent you from helping others. Knowing the answer to a question is
nowhere near as useful as knowing where to find the answer. So, by answering
questions you can also improve your knowlege. Don't get caught up in debates
about opinions or personalities, don't answer with guesses (make sure you
get your facts right) and don't try to go too far over your head. You will
find that with experience, you will naturally move to more complex issues.
Also i am a very visual learner so if any of you know any learn resources
like learnvisualstudio.net where you learn by seeing and listening rather
than reading please post links. Free/cheap webinars etc.

I too am a "visual learner." As I said, I have hundreds of bookmarks of
resources I have found along the way. Google is my home page. I can't get
more specific than that because there are all sorts of web sites out there
covering all sorts of topics. So, you need to target yourself to find the
resources you need at any given time. Again, Google is a great starting
point. Knowing how to ask a question is half the answer.

--
HTH,

Kevin Spencer
Chicken Salad Surgeon
Microsoft MVP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top