Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

C# ή VB.NET ?

Îåêßíçóå áðü ôï ìÝëïò Παναγιώτης Καναβός. Τελευταία δημοσίευση από το μέλος sakalis στις 13-12-2012, 12:44. Υπάρχουν 51 απαντήσεις.
Σελίδα 3 από 4 (52 εγγραφές)   < 1 2 3 4 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-12-2012, 23:24 71659 σε απάντηση της 53912

    Απ: C# ή VB.NET ?

    Μπορεί να με βρίσετε που ξανά-ξεθάβω αυτό το θέμα αλλά σας πληροφορώ πως διαβάζοντας ΟΛΕΣ τις απαντήσεις, έκανα εγγραφή στο site μόνο και μόνο για να απαντήσω!

    Προσωπική προτίμηση : VB.NET
    Προσωπική άποψη : C# καλύτερη από την VB.NET
    Γλώσσες που έχω χρησιμοποιήσει : VB.NET , C# , C , C++ , Python

    Πραγματικά πιστεύω πως είναι χαζό, ως και ηλίθιο να γίνεται αυτή η σύγκριση ανάμεσα σε αυτές τις τόσο όμοιες για εμένα γλώσσες! Η κάθε μια της έχει τα καλά και τα κακά της.

    Τελείως συνοπτικά, μπορώ να πω για τις δύο γλώσσες :

    VB.NET
    - Πανεύκολη να μάθεις.
    - Πανεύκολη να μάθεις προγραμματισμό (Επίσης σημαντικό, μην το ξεχνάμε)
    - Πανεύκολη στην δημιουργία GUI (Οκ αυτό είναι λόγο του visual studio αλλά παραμένει προσόν)
    - Αφήνει "κακά" προγραμματιστικά χούγια στους καινούργιους.

    C#
    - Επιβάλει ποιο προσεγμένο κώδικα.
    - Είναι πιο επαγγελματική.
    - Είναι πιο κοντά στις C/C++, δεν χρειάζεται να μάθεις τις δομές και τους τελεστές δηλαδή....
    - Γίνεται πολύ κακό για το τίποτα.

    Ως άτομο που έχει χρησιμοποιήσει και τις 2 (4 χρόνια την VB και 1 χρόνο την C# ), ακούστε ποια είναι η γνώμη μου σε απλά ελληνικά .

    Η Microsoft έφτιαξε ένα γαμάτο framework, το .ΝΕΤ  και αποφάσισε να προσαρμόσει την Basic πάνω σε αυτό, καθιερώνοντας μια υπέροχη/εύχρηστη/εύκολη/ευέλικτη ( και γενικά πολλά "ευ" ) γλώσσα, την Visual Basic. Όμως η VB δεν παύει να είναι ( και να κουβαλάει το όνομα ) της BASIC  η οποία εξ' ορισμού είναι για αρχάριους και οι επαγγελματίες προγραμματιστές την σνόμπαραν.

    Έτσι είπαν : Έχουμε που έχουμε το .ΝΕΤ που τα σπάει, γιατί να μην έχουμε και μια γλώσσα, που θα την έχουμε φτιάξει ΕΜΕΙΣ + θα το χρησιμοποιεί στο ΦΟΥΛ +  να μην κουβαλάει  το όνομα της BASIC ( αρά να μην δέχεται και αρνητική κριτική ) ? Ας πάρουμε την "επαγγελματική" σύνταξη που χρησιμοποιεί η C και ας της βάλουμε το .ΝΕΤ. Έτσι βγήκε η C# η οποία αρχικά λεγόταν Cool ( C- like Object Oriented Language ) . Φαπ! Ας πετάξουμε σιγά σιγά το υιοθετιμένο παιδάκι μας την VB και ας ασχοληθούμε με το καθαρόαιμο μαϊκροσοφτιανικό μας παιδί, την C#.

    Και αυτός είναι ο λόγος που πιστεύω ότι όλο και περισσότερη σημασία δίνεται πλέον στην C# από την MS ( Χωρίς να σταματάει η υποστήριξη στην VB αφού υπάρχουν πολλοί χρήστες ).

    Για εμένα η C# και η VB είναι ίδιες με 1 μεγάλο αρνητικό για την κάθε μία.

    Η VB δεν έχει δείχτες οπως η C#.
    H C# δεν είναι εύκολη στην γραφή κώδικα όπως η VB.






  •  04-12-2012, 09:30 71660 σε απάντηση της 71659

    Απ: C# ή VB.NET ?

    Μήπως η άποψη σου για την C# επηρεάζεται από την έλλειψη εμπειρίας? 1 χρόνος είναι ελάχιστος για να καταλάβεις μία γλώσσα.

    Ούτε είναι θέμα "σνομπισμού" ότι η VB.NET δεν έχει την διάδοση της C#. Και το λέω με τη δική μου εμπειρία, που δούλευα Classic VB για τα πρώτα 8 χρόνια, C# για άλλα 10 (και 2 χρόνια επικάλυψη). Αν θυμάμαι μιά φάση σνομπισμού, ήταν από τους προγραμματιστές που ήξεραν μόνο VB 6 και έλεγαν "ποιός χρειάζεται αντικείμενα". Η άλλη φάση σνομπισμού ήταν από του προγραμματιστές Delphi, που έλεγαν ότι η C# είναι D flat.

    Όσο για τους δείκτες ... ΠΟΙΟΥΣ δείκτες??????? Και η VB.NET και η C# έχουν τα ίδια βασικά χαρακτηριστικά πάνω-κάτω. Μήπως εννοείς τον unsafe κώδικα? Οι περιπτώσεις που χρειάζεται unsafe κώδικας είναι ελαχιστότατες. Προσωπικά δεν έχω χρησιμοποιήσει ποτέ unsafe κώδικα, εδώ και 10 χρόνια. Όσο για τα "ευ" ... ό,τι κάνεις με VB.NET μπορεί να γίνει το ίδιο εύκολα και με C#. 

    Επιβολή προσεγμένου κώδικα? Εδώ κάτι έπιασες, αλλά κάπως ανάποδα. Ο περισσότερος κώδικας που έχει γραφτεί σε VB είναι κακός και απρόσεκτος. Αλλά αυτό οφείλεται στον προγραμματιστή, όχι στη γλώσσα. Ο ίδιος προγραμματιστής αν γράψει σε C# θα κάνει τα ίδια λάθη, με τον ίδιο ακριβώς τρόπο. Αυτή η απροσεξία είναι που έβγαλε κακό όνομα και στη γλώσσα. 

    Όπως και να έχει, η συζήτηση VB.NET ή C# δεν έχει πλεόν νόημα γιατί πολύ απλά είναι αδύνατον να είσαι προγραμματιστής σήμερα και να ξέρεις μόνο μία γλώσσα, και ειδικά VB.NET. Οι πιο διαδεδομένες γλώσσες για web programming είναι PHP, Python, Ruby και Javasctipt. Η Java κρατάει καλά και έχουν βγει πολλές γλώσσες πάνω από το JVM όπως η Groovy και η Scala. Στο χώρο του .NET, οι εξελίξεις είναι πάντα στο χώρο της C# με την F# να έχει σημαντική παρουσία ως η "μόνη" functional γλώσσα στο χώρο του .ΝΕΤ. 

    Επιπλέον, γνωρίζοντας πολλές γλώσσες μαθαίνεις να σκέφτεσαι καλύτερα και με διαφορετικούς τρόπους. Σκέψου για παράδειγμα τη διαφορά μεταξύ μίας procedural γλώσσας όπως η C# και μίας declarative όπως η SQL, ή μίας functional όπως οι F#, Scala. Πόσες φορές έχεις δει πάναργο data access κώδικα σε VB.NET επειδή κάποιος δεν ήξερε πως να κάνει την ίδια δουλειά με SQL? Πόσο καλύτερο κώδικα μπορείς να γράψεις σε .NET μόλις καταλάβεις πως δουλεύει η SQL και τί σημαίνει set-based programming?

    Τέλος, σκέψου πόσα open source projects είναι γραμμένα σε C# και πόσα σε VB.NET. Δεν είναι η Microsoft που επέβαλε την C#. Είναι οι ίδιοι οι προγραμματιστές που κάνανε την επιλογή.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-12-2012, 14:24 71671 σε απάντηση της 71660

    Απ: C# ή VB.NET ?

    Από χθες κρατιέμαι και λέω άστο Γιώργιο μην...

    Μέχρι που ήρθε ο Παναγιώτης και έγραψε. Αν και με τα περισσότερα είμαι σύμφωνος αυτή την τελευταία γραμμή τι την ήθελες ε;;;; Να ξεχάσω εγώ ολόκληρα site στο MSDN που εκεί που υπήρχαν samples με VB.Net και C# ξαφνικά να γυρίζουν σε C#; Να ξεχάσω εγώ του ευαγγελιστές, πανάθεμά τους, που ξεχάσανε τελείος να αναφέρουν την VB στα blog τους; Ακόμα θυμάμαι την έκπληξη εκείνη την περίοδο βλέποντας αυτές τις αλλαγές και αναρωτιόμουν τι έγινε ρε γαμώτο; Γίνεται τίποτα εκεί στο Redmond και δεν έχω πάρει χαμπάρι; Ποιοι προγραμματιστές; Αν η Microsoft δεν ξεκαθάριζε την προτίμησή της ακόμα θα βλέπαμε blog για το πια είναι καλύτερη, που καμία δεν είναι, είναι και οι δύο το ίδιο.

    Η μάχη μεταξύ VB/C# δεν κρίθηκε στις δυνατότητες αλλά σε άλλους παράγοντες και κυρίως σε ΕΝΑΝ. Κρατήστε στην εξίσωση μία μεγάλη ομάδα προγραμματιστών της Microsoft που δούλευε σε C++. Κρατήστε επίσης και αυτούς που ήρθαν από Java (ο ένας παράγοντας που έλεγα), γιατί ως γνωστόν το τμήμα Marketing της Microsoft όταν σκέφθηκε να βγάλει μία .Net έκδοση της C++ έβλεπε πόσους θα φέρει από Java και καταλαβαίνεται πως το παιχνίδι είχε ήδη στηθεί. Η Microsoft ήθελε να ρίξει περισσότερο βάρος στην C# γιατί έτσι ήθελε εκείνη την εποχή. Ο κάθε java developer να είχε την αίσθηση πως η Microsoft με την C# έρχεται πιο κοντά σε αυτόν από ποτέ... Τα υπόλοιπα ως γνωστόν πάνε με την παροιμία, όταν μπει το νερό στο αυλάκι...

     

     

     

     

  •  04-12-2012, 16:33 71672 σε απάντηση της 71660

    Απ: C# ή VB.NET ?

    Ίσως δεν έγινε κατανοητό το ύφος μου για τις δύο γλώσσες.
     
    Δεν έχω κάτι κατά της VB ούτε της C#. Και οι δύο μου αρέσουν ,έχοντας μια μικρή προτίμηση στην VB λόγω ευκολίας. Αυτό που ήθελα εν ολίγοις να πω είναι πως και οι δύο είναι ίδιες, απλά η C# θεωρείται καλύτερη λόγω του ποιο επαγγελματικού της παρουσιαστικού, και λόγω της περισσότερης σημασίας που της δίνεται από την MS. Η οποία με την σειρά της δίνει περισσότερη βάση επειδή είναι δική της γλώσσα και λογικό μου φαίνεται!

    • Όσο για τα "ευ" ... ό,τι κάνεις με VB.NET μπορεί να γίνει το ίδιο εύκολα και με C#.
    Το ξέρω, δεν είπα ότι η VB έχει ποιο πολλές ικανότητες από την C#.
    • Ο περισσότερος κώδικας που έχει γραφτεί σε VB είναι κακός και απρόσεκτος. Αλλά αυτό οφείλεται στον προγραμματιστή, όχι στη γλώσσα.
    Συμφωνώ - δεν συμφωνώ... Από την μια δεν μπορείς ποτέ να κατηγορήσεις την γλώσσα για το αν ο προγραμματιστής γράφει βλακείες... όμως μπορείς να την κατηγορήσεις για το αν ΑΦΗΝΕΙ τον προγραμματιστή να κάνει προχειρότητες. Ένα πολύ μικρό παράδειγμα που μου έρχεται στο μυαλό είναι το πως η VB αφήνει τον χρήστη να περνάει αριθμητικές μεταβλητές σε string χωρίς να χρειάζεται να τις μετατρέπει πρώτα, κάτι το οποίο πάντα θεωρούσα προχειρότητα αλλά δυστυχώς το έκανα επειδή βαριόμουν να γράψω ένα .ToString()

    VB
    Dim myint As Integer = 10
    Dim mystr As String = myint
    C#
    int myint = 10;
    string mystr = myint.ToString();

    Αλλά μην μείνουμε σε αυτή την λεπτομέρεια
    •  Δεν είναι η Microsoft που επέβαλε την C#. Είναι οι ίδιοι οι προγραμματιστές που κάνανε την επιλογή.
    Για εμένα, και οι δύο κάνανε την επιλογή. Η Microsoft ήθελε να έχει στο όνομα της μια επαγγελματική γλώσσα που να προσελκύσει χρήστες C,Java και οι προγραμματιστές (το μεγαλύτερο μέρος, όχι όλοι) ήθελαν να μην χρησιμοποιούν την BeginersASIC. Και σου ξαναθυμίζω πως δεν είμαι κατά της C#, απλά αυτό πιστεύω για το "παρασκήνιο" του όλου θέματος

    :)
  •  04-12-2012, 16:48 71673 σε απάντηση της 71672

    Απ: C# ή VB.NET ?

    Έχω ένα καλύτερο, εγκληματικό παράδειγμα. On Error GoTo ... ή ακόμα χειρότερα, On Error Resume Next. Ή αλλιώς, αν σκάσει error το κάνουμε γαργάρα και προχωράμε . Έχει τύχει να δω κώδικα σε χρηματιστηριακή που άρχισε ξαφνικά να βγάζει αποδόσεις -100% επειδή κάπου, κάποιος είχε κάνει τέτοια κολπάκια.

    Αυτά όμως το 2005. Γιατί πλέον, η ουσία δεν είναι αν η VB.NET είναι καλή γλώσσα. 

    Το πρόβλημα πλέον είναι ότι έχουμε πρόβλημα όσοι δεν ξέρουμε KAI PHP, Python ή Java, μαζί πάντα με Javascript και τουλάχιστον 2-3 frameworks (η jQuery δεν μετράει, θεωρείται δεδομένη). Έχει πλέον πολύ πλάκα να βλέπεις την Microsoft να προωθεί Hadoop και να ξέρεις ότι ΔΕΝ πρόκειται να βρεις τέτοια δουλειά επειδή δεν έχεις 3-4 χρόνια προϋπηρεσία Java.

    Ο single language programmer ήταν πάντα καταδικασμένος. Απλά τώρα διαπιστώνω ότι και ο single environment programmer δεν θα τα πάει πολύ καλύτερα.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-12-2012, 18:29 71674 σε απάντηση της 71673

    Απ: C# ή VB.NET ?

    Συμφωνώ με αυτό, άλλωστε συμφωνώ με πολλά από αυτά που λες. Πλέον ο προγραμματισμός είναι πιο απαιτητικός από ότι ήταν. Εγώ θα το πάω και λίγο παρακάτω με όλες αυτές τις συσκευές που βγαίνουν τώρα και θα πρόσθετα όχι μόνο single environment αλλά και single platform.

    Δυστυχώς το .Net δεν υποστηρίζει Mobile συσκευές και εκεί με τις ταμπλέτες προβλέπω πως η λύση θα είναι ένα υβρίδιο, ήδη πρόσφατα διάβασα για ταμπλέτα της Intel με x86 επεξεργαστή με σημαντικά περισσότερο βάρος και σημαντικά μειωμένη αυτονομία από της αντίστοιχες με RT. Άραγε θα ακολουθήσουν και άλλες; Πολύ φοβάμαι, πως λόγο και των εξελίξεων φυσικά, το .Net έτσι όπως το δουλεύαμε μέχρι πριν από λίγο καιρό δεν θα είναι αρκετό για να καλύψει την αγορά.

  •  05-12-2012, 11:34 71675 σε απάντηση της 71674

    Απ: C# ή VB.NET ?

    George Parissis:

    ... Εγώ θα το πάω και λίγο παρακάτω με όλες αυτές τις συσκευές που βγαίνουν τώρα και θα πρόσθετα όχι μόνο single environment αλλά και single platform.



    Συμφωνώ κι εγώ. Κι όλα δείχνουν ότι το κριτήριο της... φυσικής επιλογής λέγεται "Smartphone - Tablet". Όποια πλατφόρμα κυριαρχήσει εκεί, θα επικρατήσει σιγά - σιγά και στο Desktop. Εξαιρείται η Apple. Είναι απείρως πιο κλειστή από τη Microsoft.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  05-12-2012, 16:45 71678 σε απάντηση της 71673

    Απ: C# ή VB.NET ?

    Παρόλο που συμφωνώ μαζί σου για την On Error GoTo/Resume Next, πραγματικά πιστεύω πως έχει λάβει υπερβολικά αρνητική κριτική και δεν της αξίζει γιατί υπάρχουν κάποιες περιπτώσεις που έχεις μια function που κάνει κάποια δουλειά κατά την οποία αν προκύψει πρόβλημα , να θες να το αγνοήσεις.

     Γιατί πρέπει οπωσδήποτε δηλαδή να βάλεις Try Catch σε ένα μεγάλο μέρος της συνάρτησης και να μην βάλεις ένα On Error Resume Next στην αρχή ( αυξάνοντας και την ευκολία στο debuging γιατί όποτε δεν το θές , κάνεις comment out την πρώτη γραμμή και δεν ψάχνεις να βρεις το Try, to Catch και το End Try).

    Επίσης, ακόμα και μια λούπα μπορεί να θες να την αγνοήσεις. Θυμάμαι που έφτιαχνα ένα μικρό σύστημα εντοπισμού τραγουδιών μέσα στα αρχεία ενός User και καθώς έψαχνα τους φακέλους, κάποιοι δεν έδιναν στην εφαρμογή το δικαίωμα να τους ψάξει, και σταματούσε την εφαρμογή για έναν τελείως ασήμαντο λόγο. Οκ, δεν με νοιάζει να ψάξω φακέλους του συστήματος για να βρώ τα τραγούδια μου! Γιατί να παιδευτώ και να βάλω try?

    'QUICK SEARCH
                If My.Settings.QuickSearch Then
                    On Error Resume Next
                    For Each Dir As String In My.Computer.FileSystem.GetDirectories("C:\Users\" & UserName(), FileIO.SearchOption.SearchTopLevelOnly)
                        If Not Dir.Contains("AppData") Then TopLevel.Add(Dir)
                    Next
                Else
                    TopLevel.Add("C:\")
                End If
    Στα υπόλοιπα συμφωνώ :)
  •  06-12-2012, 10:58 71689 σε απάντηση της 71678

    Απ: C# ή VB.NET ?

    To On Error Resume Next είναι αντίστοιχο με το να τυλίγεις μία καμένη ασφάλεια με αλουμινόχαρτο - ή να κολλάς επάνω το ρελαί που έπεσε. Τα exceptions είναι ο τρόπος της γλώσσας και του λειτουργικού να σου πουν ότι κάτι σοβαρό συνέβει και κάηκε η ασφάλεια. 

    Αν σκάει exception, θέλεις να δεις τί ήταν και να το διορθώσεις, όχι να το αγνοήσεις. Αν σε ενοχλεί το ότι η εκτέλεση μετακινείται μακρυά από το σημείο που έσκασε το exception, σημαίνει ότι το ίδιο το function σου έχει πρόβλημα και είναι πολύ μεγάλο. Αν ένα function κάνει τόσες δουλειές που σε απασχολεί πού θα συνεχίσει ο κώδικας μετά από ένα σφάλμα, πρέπει να το σπάσεις αμέσως.

    Όσο για το "γιατί να παιδευτώ", ένα από τα χαρακτηριστικά που ξεχωρίζει τους junior από τους senior developers ή αυτούς που ασχολούνται επαγγελματικά με τον προγραμματισμό από αυτούς που προγραμματίζουν περιστασιακά, είναι ακριβώς ο βαθμός στον οποίο θέλουν να κάνουν κάτι σωστά αντί να το κάνουν "στα γρήγορα". 

    Τέτοια "στα γρήγορα" έχουν οδηγήσει σε τραγελαφικές καταστάσεις, όπως τη φορά που βρήκα κώδικα που γύριζε υπόλοιπο λογαριασμού 0 σε χρηματιστηριακή γιατί ... μάντεψε .... κάποιος είχε βάλει On Error Resume Next στο σημείο που διάβαζε την ισοτιμία του δολλαρίου. Ένα σκασιματάκι που έκανε Resume Next και όλοι οι λογαριασμοί βγήκαν 0.




    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-12-2012, 11:40 71692 σε απάντηση της 71689

    Απ: C# ή VB.NET ?

    Ούτε προφήτης να ήτανε ... Ο Διομήδης Σπινέλλης ανέβασε blog post για το πόσο επηρεάζονται διάφορες γλώσσες από τυχαία λάθη και κυρίως, κατά πόσο λανθασμένος κώδικας μπορεί να οδηγήσει σε λανθασμένα αποτελέσματα. 

    Η VB δεν περιλαμβάνεται στις 10 γλώσσες λόγω ... περιορισμένης δραστηριότητας (στο IOBE, το Craigslist και σε διαθέσιμο source) αλλά η παρομοίως ανεκτική PHP βγήκε η χειρότερη γλώσσα, με ~35% των λαθών να οδηγούν σε λανθασμένα αποτελέσματα αντί για κάποιο σκάσιμο.

    Αντιθέτως, οι ασφαλέστερες ήταν οι γλώσσες της οικογένειας C/C++/C#/Java, με τη σειρά ... C++, C#, C και Java με ποσοστά 9-10%.

    Η πλήρης δημοσίευση με νούμερα είναι εδώ



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-12-2012, 13:03 71695 σε απάντηση της 71692

    Απ: C# ή VB.NET ?

    Συμφωνώ με τα τελευταία σχόλια του Παναγιώτη.

    Πριν από 2 χρόνια είχα μια μακροσκελή κουβέντα με τον Σπινέλλη.
    Το θέμα μας ήταν το "ποιό ποσοστό του κώδικα είναι error handling" και αν μπορούν να φτιαχτούν εργαλεία metrics που να το μετράνε.

    Η δική του εκτίμηση ήταν ότι για business critical συστήματα ήταν minimum 30%, και για mission critical (λειτουργικά, κλπ) περίπου 40%.
    Εγώ, με βάση την προσωπική μου εμπειρία, δηλαδή το πώς γράφω κώδικα και πώς βάζω άλλους να γράφουν κώδικα, ήταν 40% και 50% αντίστοιχα.

    Είναι εξαιρετικά εύκολο να γράψει κάποιος κώδικα που να δουλεύει σωστά, όταν ΟΛΑ πάνε καλά.
    Το αγγούρι είναι όταν τα πράγματα δεν πάνε καλά, και υπάρχουν χιλιάδες τρόποι να μην πάνε καλά.

    Για εμάς που είμαστε "παλιοί" τα exceptions είναι πολύ απλή ιστορία.
    Υπήρχαν από την εποχή του DOS και Windows 3.1. Απλά setjmp και longjump και ήσουν έτοιμος.
    Η χρήση τους υπερσπάνια, όπως π.χ. σε compiler γραμμένο σε C++ που κάνει την λεγόμενη αναδρομική κατάβαση.
    Βέβαια δεν έκανε stack cleanup, έπρεπε να φροντίζω να κρατάω όλα τα objects κάπου, ώστε αν σκάσει "exception" να κάνω cleanup μόνος μου.
    Σιγά το πράγμα.

    Μετά τα NT βάλανε το SEH (Structured Exception Handling), το οποίο ήταν σε επίπεδο λειτουργικού, μαζί με finally, και δούλευε και σε kernel mode.
    Πάλι, δεν είχε object cleanup. No big deal. Υπάρχουν εκατομμύρια γραμμες κώδικα που δεν χρησιμοποιούν objects.

    Μετά τα έβαλε και η C++, ώστε κατά το stack unwinding να γίνονται cleanup τα local object (on stack), και μάλιστα επιτρέπει και μίξη SEH και C++ exceptions.

    Πρέπει να καταλάβετε κάτι βασικό. Τα exceptions δεν είναι τίποτα άλλο παρά ένα φρικαλέο GOTO, που διατρέχει δεκάδες functions, με πιθανώς άγνωστο προορισμό, μαζί με ολίγη από gabrage colletion.

    Είχε γράψει ο Joel Spolsky παλιότερα πάνω στο θέμα, ότι μισεί τα exceptions, και κάπου είχα γράψει και εγώ ότι τα υπερμισώ.
    Ο λόγος;;;;
    H σωστή κατανόηση και σωστή χρήση των exceptions είναι κάτι που ΔΕΝ μπορεί να συλλάβει ο μέσος προγραμματιστής.
    Απλά ΔΕΝ ΜΠΟΡΕΙ.

    Εγώ ξέρω πώς να τα χρησιμοποιήσω σωστά, αλλά γράφω κώδικα 20 χρόνια, έχω γράψει άπειρο mission critical kernel mode κώδικα, άπειρο business critical C++ κώδικα και κατανοώ πώς πρέπει να χειριζόμαστε τα exceptions και τι πάει να πει error handling.
    Ο μέσος προγραμματιστής απλά θα κάνει ένα exception spaghetti.

    Για να το θέσω απλά: Exception και Error ΔΕΝ ΕΙΝΑΙ ΤΟ ΙΔΙΟ ΠΡΑΓΜΑ.
    Το .ΝΕΤ και η Java δυστυχώς το έχουν κάνει να φαίνεται το ίδιο, αλλά ΔΕΝ είναι το ίδιο.

    Exceptions are exceptional or unpredictable problems, errors are expected or predictable problems.
    Τα errors μπορούν να γίνουν handle, τα πραγματικά exceptions σπανίως.

    Δοκιμάζει το πρόγραμμά σου να κάνει login κάπου (μέχρι χτες έπαιζε) και σήμερα παίρνει authentication error.
    Αυτό είναι error, δεν είναι exception. Εϊναι 100% προβλέψιμο ότι θα συμβεί.
    Πας να διαβάσεις ένα αρχείο, και δεν έχεις access στο directory.
    Ή φορτώνεις και πας να σώσεις ένα αρχείο και κάποιος το έχει κάνει read-only. Έχεις security permissions, αλλά το αρχείο είναι read-only.
    Γράφεις/Διαβάζεις από ένα USB Stick και ο χρήστης το βγάζει και την κάνει για Μπαχάμες.
    Είναι errors όχι exceptions. 100% προβλέψιμο ότι θα συμβούν.
    Κάνει ο κώδικάς σου download και κόβεται το connection. Error, not exception.

    Τι είναι exceptions;
    Κάνεις ένα query στη βάση, άμεσα ή έμμεσα, και τρώει timeout ή connection lost (στο local lan).
    Κάνεις insert/update στη βάση και τρώει ο DB Server ένα disk full.
    Πας να επικοινωνήσεις με έναν host και τρώς host unreachable.
    Τρώς memory access violation exception (SEH) γιατί πήγες στα χωράφια.
    Τρως memory allocation failure (memory full). To handling του memory full έχει πολύ πλάκα, έχω ρίξει απίστευτα γέλια. Τι μπορεί να κάνει ένα πρόγραμμα όταν τα Windows δεν μπορούν ούτε καν να ανοίξουν ένα message box???

    Δηλαδή, νομίζετε ότι τόσα χρόνια τα λειτουργικά (στο μεγαλύτερο ποσοστό του κώδικα) και οι device drivers γράφονται σε C μόνο και μόνο για το performance;;; Και η C++ έχει ουσιαστικά το ίδιο performance. 
    Στα Windows όμως απαγορεύεται η C++ σε kernel code. ΑΠΑΓΟΡΕΥΕΤΑΙ. Γιατί;
    (1) Έναν σοβαρό προγραμματιστή η C τον εξαναγκάζει να κάνει σωστό και πλήρες error handling. Και τον διευκολύνει να γράψει κώδικα δομημένο σωστά, γιατί ΔΕΝ του δίνει την επικύνδινη δυνατότητα για φρικαλέα GOTO.
    (2) Ο κώδικας C είναι 100% predictable ώς προς το control flow. Δεν υπάρχουν "κρυμμένοι" copy constructors, destructors, garbage collections, overloaded operators κλπ που κάνουν μαγικά πράγματα χωρίς να παίρνει χαμπάρι τίποτα ο προγραμματιστής. Το control flow στη C είναι 100% explicit.

    Ας το αφήσουμε αυτό, όποιος διαφωνεί δικαιωμά του.

    Στην επιλογή γλώσσας προγραμματισμού και πλατφόρμας επικρατεί φυσική επιλογή.

    Όσοι γουστάρουν και κατανοούν τα πολύπλοκα, κατανοούν και γουστάρουν το error handling και το επαγγελματικό error reporting, είναι οργανομένοι και τακτοποιημένοι μέσα στο μυαλό τους, δεν έχουν κανένα πρόβλημα με τη C και τη C++. Και καταλήγουν στις αντίστοιχες δουλειές.
    Κάποιος που είναι ΟΚ με τη C++, την VB.NET θα την βρει μάλλον αηδιαστική, γιατί είναι πολύ πιο χύμα.
    Εγώ την βρίσκω αηδιαστική και για τον επιπλέον λόγο, ότι εξαιτίας της φυσικής επιλογής, αν κουμάνταρα ένα project VB.NET τότε ΜΑΛΛΟΝ θα περιστοιχιζόμουνα από μέτριους και χύμα προγραμματιστές. Απλό είναι. Εγώ αν έγραφα VB.NET ο κώδικάς μου θα ήταν ολόιδιος με τη C#. 40-50% error handling. Και θα δούλευαν όλα ρολόι. Αλλά οι άλλοι γύρω μου;;;

    Συνεπώς, αν δεχτείτε την εκτίμηση του Σπινέλλη για 30-40% error handling code, και κοιτάξετε ξανά τον κώδικά σας, θα δείτε ότι ΔΕΝ φταίει η γλώσσα. Οι προγραμματιστές φταίνε. Αυτά τα παραμύθια ότι η γλώσσα σε προστατεύει από λάθη, είναι 90% ΜΥΘΟΣ.
    Δηλαδή το πρόβλημα της C/C++ είναι ότι δεν σε προστατεύει επειδή δεν ελέγχει τα array bounds???
    Εϊπαμε, φυσική επιλογή. Αν δεν μπορείς να γράψεις κώδικα που χειρίζεται ένα φουκαριάρικο array σωστά, τότε ΠΑΡΑΤΑ τη C/C++, δεν είναι για σένα, δεν κάνεις για τις δουλειές που απαιτούν C++.
    Ή το πρόβλημα είναι τα memory leaks? Αν δεν μπορείς να χειριστείς σωστά το memory handling, τότε ΠΑΡΑΤΑ τη C/C++, δεν κάνεις για τις δουλειές που απαιτούν C++.
    Και το .ΝΕΤ έχει memory leaks, κάντε ένα google search να ρίξετε γέλιο. Ο Μανωλιός έβαλε τη σκούφια του αλλιώς.

    Έχω γράψει και εγώ μπόλικη VB6 στο παρελθόν. Και είχα γράψει και OnError Resume Next. Αλλά έλεγχα το τιμημένο error code, δεν συνέχιζα στην καλή χαρά.
    Αν έβλεπες την VB6 που έγραφα θα φρικάριζες, ήταν τόσοι πολλοί οι έλεγχοι που γινόντουσαν και τόσο αναλυτικό το error reporting που όντως ήταν το 30-40% του κώδικα. Και όταν τον βλέπανε οι normal VB6 programmers της εταιρίας, πραγματικά "φρικάρανε" και με ρωτάγανε αν πράγματι χρειάζεται τόσο πολύ error checking και μήπως υπερβάλλω.
    Τα συγκεκριμένα components εμπλεκόντουσαν στην αποστολή εντολών στο ΧΑΑ... μάλλον δεν υπερέβαλα. Και τόσα χρόνια ΠΟΤΕ δεν υπήρξε bug στις live εγκαταστάσεις.

    Συνεπώς: ΔΕΝ φταίει η γλώσσα. ΦΤΑΕΙ ο προγραμματιστής.
    End of Story

    The fact that the program works is irrelevant.
  •  06-12-2012, 13:31 71696 σε απάντηση της 71695

    Απ: C# ή VB.NET ?

    BruteForce:

    Τα συγκεκριμένα components εμπλεκόντουσαν στην αποστολή εντολών στο ΧΑΑ... μάλλον δεν υπερέβαλα. Και τόσα χρόνια ΠΟΤΕ δεν υπήρξε bug στις live εγκαταστάσεις.

    Συνεπώς: ΔΕΝ φταίει η γλώσσα. ΦΤΑΕΙ ο προγραμματιστής.


    Και μόλις θυμήθηκα την Knight Capital και το algorithmic trading. Όπως ίσως έχει διαπιστώσει και ο Δημήτρης, ο κόσμος που ασχολείται με χρηματιστηριακά δεν παίρνει και τόσο στα σοβαρά την ποιότητα και το error/exception safety του κώδικα. Υπάρχει ΠΟΛΥ On Error Resume Next ή catch {} στα χρηματιστηριακά. Σου λέει ο άλλος, αν βγει 1 μέρα νωρίτερα, θα βγάλω 1Μ παραπάνω και αν έχει προβληματάκια, ε θα τα συγυρίσω. Άσχετα αν η κακή σχεδίαση παράγει 1Μ προβλήματα.

    Και βγαίνει που λες η Knight Capital με νέα υπηρεσία για algorithmic trading τον Αύγουστο, διαφημίζοντας ότι ήταν η πρώτη που έβγαλε υποστήριξη για τη ΧΨΩ πλατφόρμα, πρίν απ' όλους και τα σχετικά, πρώτη στην αγορά και όλα αυτά. Προφανώς, με το να βγούνε πρώτοι θα κερδίζανε κάμποσα μύρια σε σχέση με όσους θα έρχονταν μετά, οπότε κόψανε πάλι δρόμο. Αποτέλεσμα ....

    Μέσα σε 45 λεπτά χάσανε $450 εκατομμύρια . Κάποιος "ξεχασμένος" κώδικας έσκασε, και οι εφαρμογές πουλούσανε φθηνά και αγοράζανε ακριβά λόγω λαθών. Η εταιρεία αναγκάστηκε να πουληθεί ουσιαστικά μέσα σε 4 μέρες. 

    Πάω στοίχημα πάντως ότι ο κώδικας ήταν γραμμένος σε C και έτρεχε σε Linux για να είναι πιο γρήγορος. Όπως όμως λέει και ο Δημήτρης, είναι ο προγραμματιστής, όχι η γλώσσα που μετράει.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-12-2012, 14:20 71697 σε απάντηση της 71695

    Απ: C# ή VB.NET ?

    BruteForce:

    H σωστή κατανόηση και σωστή χρήση των exceptions είναι κάτι που ΔΕΝ μπορεί να συλλάβει ο μέσος προγραμματιστής.
    Απλά ΔΕΝ ΜΠΟΡΕΙ.

    Και όχι μόνο ο μέσος προγραμματιστής. Το HttpWebRequest θα πετάξει exception είτε ζητήσεις μία σελίδα που λείπει και πάρεις 404, είτε ζητήσεις μόνο την αλλαγμένη σελίδα και πάρεις 304. Το οποίο σημαίνει ότι η σελίδα δεν άλλαξε, και δεν πρόκειται ούτε καν για error. Ευτυχώς συνήλθαν λίγο στο .ΝΕΤ 4.5 και ο HttpClient δεν σηκώνει αυτόματα exceptions ...

    Θα πάω λίγο παραπέρα. Τα exception είναι απλά ένας μηχανισμός για να σε ειδοποιήσει και να σε προστατεύσει  σε exceptional καταστάσεις. ΔΕΝ είναι μηχανισμός ο οποίος θα χειριστεί τις καταστάσεις. Αυτό είναι δουλειά του προγραμματιστή, να σχεδιάσει τον κώδικα του έτσι ώστε να αντιμετωπίσει σωστά αυτή την έκτακτη κατάσταση. Το παράδειγμα με το ρελαί δεν είναι τυχαίο.

    Είναι άλλο θέμα πως θα φτιάξεις κώδικα που αντέχει σε exceptions και άλλο πως θα χειριστείς τα exceptions ή τα errors:
    • Αντοχή (ή exception safety) σημαίνει ότι ο κώδικας θα δουλέψει σωστά ακόμα και αν υπάρξει exception και δεν θα αφήσει πράγματα στον αέρα. Κώδικας ο οποίος πειράζει global/external variables για παράδειγμα, δεν αντέχει τόσο όσο κώδικας ο οποίος τροποποιεί μόνο local coipes των variables και τα επιστρέφει. Ένα function που κάνει 5 διαφορετικά πράγματα είναι πιο επικίνδυνο από 5 μικρότερα functions που κάνουν μόνο 1 πράγμα. Τα functions του C++ Standard Template Library είναι exception safe παρότι (ή επειδή) δεν χρησιμοποιούν try/catch ακριβώς επειδή έχουν σχεδιαστεί ώστε να είναι exception safe.
    • Ο χειρισμός έχει να κάνει με το τί κάνεις αφού "πέσει" η ασφάλεια και συνεφέρεις το πρόγραμμα. Τί κάνεις, συνεχίζεις με το επόμενο βήμα, ακολουθείς άλλη διαδρομή, δοκιμάζεις ξανά? Στην πραγματικότητα μιλάμε για κώδικα ο οποίος δεν έχει σχέση (ή θέση) με το catch, αλλά εκτελείται αφού ολοκληρωθεί το catch και διαπιστωθεί ότι η εκτέλεση θα πρέπει να συνεχίσει με διαφορετικό τρόπο.
    Και τα δύο θέματα απαιτούν προσεκτική σχεδίαση τόσο σε επίπεδο μεμονωμένων function όσο και στη σχεδίαση ολόκληρων modules.

    Για να πάμε πίσω στο παράδειγμα του ρελαί, δεν αρκεί να πέσει το ρελαί για να σε προστατεύσει από ηλεκτροπληξία ή πυρκαγιά. Πρέπει η κάθε ηλεκτρική συσκευή και τα καλώδια να έχουν σχεδιαστεί έτσι ώστε να αντέξουν στην απότομη διακοπή ή επαναφορά του ρεύματος. 

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-12-2012, 15:08 71698 σε απάντηση της 71697

    Απ: C# ή VB.NET ?

    Good points.

    Για να κάνω μια αναλογία που νομίζω είναι σχετική, ο απόλυτος παράδεισος του error handling είναι οι Database Servers.
    BEGIN TRANSACTION και αν κάτι πάει στραβά ROLLBACK και όλα καθαρά και ανέγγιχτα.

    Αυτό είναι τόσο βοηθητικό, που το Win32 και ο kernel των Windows, έχουν ρουτίνες για transactional handling της registry και το file system!

    Στον κώδικα C++/C# όμως το handling είναι σαφώς πιο δύσκολο, γιατί ο κώδικας πρέπει να γραφτεί functional.
    Συνήθως μετά από ένα error το object είναι "άχρηστο", δηλαδή δεν έχουμε ιδέα σε τι κατάσταση βρίσκεται εσωτερικά. Άρα πρέπει να το σουτάρουμε άμεσα.

    Τώρα πρέπει να καταλάβουμε κάτι βασικό.
    Κάθε member function που γράφει σε member variable, είναι σχεδόν σαν να γράφει σε global μεταβλητή.
    Όσο πιο πολλές functions γράφουν, τόσο περισσότερο χάνεται η μπάλα.

    Μια τεχνική που χρησιμοποιώ εγώ στη C#, είναι να κάνω όσο πιο πολλές member functions static, οπότε δεν μπορούν να αγγίξουν τίποτα, μόνο να δεχτούν παραμέτρους και να επιστρέψουν output. Έτσι ελαχιστοποιείται ο κώδικας που είναι σε θέση να πειράξει μια member variable.
    Επίσης ελαχιστοποιούνται τα references στις member variables και όταν κάνω Find References δεν μου βγαίνει ένας καταρράκτης, άρα μπορώ να βγάλω άκρη εύκολα και να ελέγξω τι γίνεται σε κάθε σημείο που χρησιμοποιείται η member variable.
    Αυτό βέβαια σημαίνει ότι μπορεί να γράψουμε λίγο κώδικα παραπάνω, γιατί διάφορες member variables θα πρέπει να τις περνάμε παραμέτρους στις static functions, αντί αυτές να τις διαβάζουν.

    Η C++ είχε το εκπληκτικό feature των const member functions.
    Αυτές μπορούν να διαβάσουν το state του object, αλλά ΔΕΝ μπορούν να το αλλάξουν.
    Απλά ΤΕΛΕΙΟ. Και επιπλέον έχει const parameters, οπότε περνάω ένα object σαν const reference και ο κώδικας ΔΕΝ μπορεί να το πειράξει, αλλά μόνο να το διαβάσει.
    Το 80% των C++ member functions στον κώδικά μου είναι const και έχω το κεφάλι μου ήσυχο.

    Δυστυχώς, επειδή η C# είναι φτιαγμένη ώστε να είναι κατανοητή και από πιθήκους, δεν έχει constness σε παραμέτρους και member functions.
    Οπότε ακόμα και σε static member function, αν περάσω ένα member variable που είναι List<> για παράμετρο, η static function μπορεί να του βγάλει τα μάτια.

    Με κάτι τέτοια η C++ προστατεύει τους σοβαρούς προγραμματιστές, και μου επιτρέπει να γράψω κώδικα που κάποιος στο παρελθόν τον χαρακτήρισε "Φρούριο".
    Και κόβοντας κάτι τέτοια η C# προστατεύει τους κακούς προγραμματιστές και τους διευκολύνει να μπαίνουν στο επάγγελμα και να κάνουν τη ζωή ολονών μας πολύ πιο δύσκολη, καθώς αντί για φρούρια φτιάχνουν κακοσχεδιασμένες στάνες.

    Φανταστείτε απλά, κάθε 3-4 χρόνια να απλοποιούσαν την Ιατρική όπως "απλοποιούν" το development, ώστε να έχουμε περισσότερους γιατρούς, γιατί αυτοί που έχουμε δεν φτάνουν.
    Δεν θα ήταν τραγικό;;;


    The fact that the program works is irrelevant.
  •  06-12-2012, 21:56 71701 σε απάντηση της 71689

    Απ: C# ή VB.NET ?

    "γιατί να παιδευτώ", ένα από τα χαρακτηριστικά που ξεχωρίζει τους junior από τους senior developers

    Όχι στην περίπτωση μου. Όταν έχω μια funtion που να εμφανίζει τον χρόνο που έχει περάσει από την αρχή του τραγουδιού σε ένα media player, "σκασίλα" μου αν κάποια στιγμή βγέι ένα οποιοδήποτε πρόβλημα και το φάει η On Error Resume Next. Δεν είναι όλα τα προβλήματα κρίσιμα και χρηματοοικονομικά...

    Και δεν βαριέμαι να γράψω κώδικα για να πιάνω τα προβλήματα. Στο ίδιο player, η funtion που αποθήκευε ένα αρχείο για backup ρυθμίσεις, είχε 15 εντολές. Όχι μόνο είχα βάλει Try Catch σε ΚΑΘΕ εντολή , αλλά είχα φτιάξει και enum για να το κάνω return ώστε να ξέρω ακριβώς που υπήρξε πρόβλημα και ποιο ήταν ( προκειμένου να το αντιμετωπίσω κατάλληλα ).

    Και δυστυχώς δεν είμαι junior developer... επειδή δεν έχω βρεi δουλειά ακόμα :P
Σελίδα 3 από 4 (52 εγγραφές)   < 1 2 3 4 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems